MySql查询本周或下周过生日的人

这几题我想了很久,因此记录一下.
做题思路,先将学生的生日年份统一成当前时间的年份,这样就可以直接用相差的天数判断是否本周或者下周过生日了
首先还是来建表加数据吧

-- 创建表格
create table student(
	s_id varchar(20) not null,
	s_name varchar(255) not null default '',
	s_birth varchar(20) not null default '',
	s_sex varchar(10) not null default ''
)

-- 插入数据
INSERT INTO student VALUES 
('01','赵雷','1990-01-01','男'),
('02','钱电','1990-12-21','男'),
('03','孙风','1990-05-20','男'),
('04','李云','1990-08-06','男'),
('05','周梅','1991-12-01','女'),
('06','吴兰','1992-03-01','女'),
('07','郑竹','1989-07-01','女'),
('08','王菊','1990-01-20','女'),
('09','张飞','1990-9-25','男'),
('10','刘备','1990-01-25','男'),
('11','关羽','1990-01-25','男'),
('12','金毛狮王','1850-05-24','男'),
('13','黄蓉','1890-05-31','女'),
('14','郭靖','1990-06-06','男'),
('15','潇潇','1995-06-07','女');

1.查询本周过生日的学生

select A.s_id,A.s_name from 
(
select s_id,s_name,DATEDIFF(CURDATE(),ADDDATE(s_birth,INTERVAL year(curdate()) - year(s_birth) year)) diff from student
) A
where A.diff < DAYOFWEEK(curdate()) and A.diff >= DAYOFWEEK(curdate()) - 7;

-- 结果展示
+------+----------+
| s_id | s_name   |
+------+----------+
| 12   | 金毛狮王 |
+------+----------+

2.查询下周过生日的学生

select A.s_id,A.s_name from 
(
select s_id,s_name,DATEDIFF(ADDDATE(s_birth,INTERVAL year(curdate()) - year(s_birth) year),CURDATE()) diff from student
) A
where A.diff > (7 - DAYOFWEEK(curdate()))  and A.diff <= 14 - DAYOFWEEK(curdate());

-- 结果展示
+------+--------+
| s_id | s_name |
+------+--------+
| 13   | 黄蓉   |
| 14   | 郭靖   |
+------+--------+
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值