筛选一段时间过生日的会员,会遇到以下几个问题:

1、时间以月和日来计算

2、跨月问题

3、跨年问题

现提供一个思路,类似于黑盒与白盒的概率。

把会员的生日的“年”的部分都转成和筛选时间的“年”的部分一致,然后用“between .. and ..” 来搜索。

改变日期,T-SQL提供了两个方法,DateAddDateDiff

简单介绍下,DateAdd 通过向指定日期添加间隔,返回新的 datetime 值,DateDiff 返回跨越两个指定日期的日期和时间边界的数目。

语句可以写成:

declare @StartDate    datetime   --起始时间
declare @EndDate      datetime   --结束时间
select * from [table] where 
dateadd(yy,datediff(yy,Birthday,@StartDate),birthday) between @StartDate and @EndDate+1
or dateadd(yy,datediff(yy,Birthday,@EndDate),birthday) between @StartDate and @EndDate+1

 

有几点说明:

1、一般性情况,起始时间不大于结束时间;

2、分别对起始时间和结束时间操作,解决了跨年的问题;

3、结束时间加1是按完整天数技术,包括时分秒。

 

 

posted on 2009-03-24 10:08  xiaohc  阅读(649)  评论(0编辑  收藏  举报