首先不能只比较月、日,因为8月30日要提醒9月1日的生日
那么只能从日期比较来处理
先创建表
Create table Staff(id int identity(1,1),Staff_Time Datetime)
go
insert into Staff(Staff_Time)
select '20020901' union all
select '20010917' union all
select '19820701' union all
select '19730912' union all
select '19761206' union all
select '19680918'
go
go
insert into Staff(Staff_Time)
select '20020901' union all
select '20010917' union all
select '19820701' union all
select '19730912' union all
select '19761206' union all
select '19680918'
go
以下是查3天内过生日的,这里将生日数据转化成要比较日期的当年日期,得到差距3天内的数据
declare @Date datetime
set @Date = GetDate()
Select * From Staff
Where
DateDiff(Day,DateAdd(Year,DateDiff(year,Staff_Time,@Date),Staff_Time),@Date) between 0 and 3
Drop table Staff
set @Date = GetDate()
Select * From Staff
Where
DateDiff(Day,DateAdd(Year,DateDiff(year,Staff_Time,@Date),Staff_Time),@Date) between 0 and 3
Drop table Staff
看起来好象完了,但是依然有问题。那么假如今天是2007年2月28日,那么是不是要提醒生日为2月29日的人呢,显然不需要。
那么就还需要加条件,要知道2004年2月29日,增加N年变成闰年时没有什么问题,如果非闰年的话就变成了XXXX年2月28日了。那么增加的条件就是年份增加后日期是否一致就可以了
Select * From Staff
Where
DateDiff(Day,DateAdd(Year,DateDiff(year,Staff_Time,@Date),Staff_Time),@Date) between 0 and 3
and datepart(day,Staff_Time)=datepart(day,dateadd(year,datediff(year,Staff_Time,@Date),Staff_Time))
Where
DateDiff(Day,DateAdd(Year,DateDiff(year,Staff_Time,@Date),Staff_Time),@Date) between 0 and 3
and datepart(day,Staff_Time)=datepart(day,dateadd(year,datediff(year,Staff_Time,@Date),Staff_Time))