青松

博客园 首页 新随笔 联系 订阅 管理
这个看起来很简单,写起来还有点麻烦。

首先不能只比较月、日,因为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

以下是查3天内过生日的,这里将生日数据转化成要比较日期的当年日期,得到差距3天内的数据
declare @Date datetime
set @Date = GetDate()

Select * From Staff
Where
DateDiff(Day,DateAdd(Year,DateDiff(year,Staff_Time,@Date),Staff_Time),@Datebetween 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),@Datebetween 0 and 3
and datepart(day,Staff_Time)=datepart(day,dateadd(year,datediff(year,Staff_Time,@Date),Staff_Time))







posted on 2007-09-19 17:42  轻轻松松  阅读(390)  评论(0编辑  收藏  举报