【SQL Server】查询当日过生日的人员

【SQL Server】查询当日过生日的人员,第1张

@dt1='2003-12-05',@dt2='2004-02-28'

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/sjk/6765183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存