DATEADD(Year,DATEDIFF(Year,Birthday,@dt1),Birthday)
BETWEEN @dt1 AND @dt2
DATEDIFF(Year,Birthday,@dt1)
=
@dt1 - Birthday 之间的年份
比如 Birthday 1992-12-10
那么 DATEDIFF(Year,Birthday,@dt1) = 11
DATEADD(Year,DATEDIFF(Year,Birthday,@dt1),Birthday)
=
DATEADD(Year,11,Birthday)
=
对 Birthday + 11年
= 2003-12-10
简单的说,
就是相当于
把 Birthday 的年, 换成 @dt1 的年 看看换好的日期在 @dt1 与 @dt2 范围内么?
如果不在,
把 Birthday 的年, 换成 @dt2 的年 看看换好的日期在 @dt1 与 @dt2 范围内么?
都不在, 说明生日不在这个区间段
-----
如果只要查询 当日 也就是 “今天”,那就不必这么麻烦
直接
WHERE
MONTH(mBasic.Birthday) = MONTH( GetDate() )
AND DAY(mBasic.Birthday) = DAY( GetDate() )
也就是 生日的 月 = 今天的 月 生日的 天 = 今天的天
直接把出生日期与当前时间取月份比较就可以了,如果相等,则表示该同学会在该月过生日,具体哪一天则可以不管:select * from table where month(birthday)=month(getdate())
或者换种取日期的方法:
select * from table where datepart(month,birthday)=datepart(month,getdate())
本周有点麻烦, 本月很简单本月就是
WHERE MONTH( 生日字段) = MONTH ( GetDate() )
本周就首先要计算出本周的第一天与最后一天
-- 本周一
set @dt1 = DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0)
-- 下周一
set @dt2 = DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()) + 1, 0)
然后一个有点复杂的 SQL
WHERE DATEADD(Year,DATEDIFF(Year,Birthday,@dt1),Birthday)
BETWEEN @dt1 AND @dt2
OR DATEADD(Year,DATEDIFF(Year,Birthday,@dt2),Birthday)
BETWEEN @dt1 AND @dt2
SQL 的解释如下:
http://zhidao.baidu.com/question/233016367.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)