日期:2014-05-18  浏览次数:20526 次

生日查询的问题,查了很多资料,还是有些疑问,请大家进来指教
我要查询某一段时间内要过生日的所有员工,怎么写这个查询语句

我用的是邹建那本sql   server2000开发与管理应用实例上面介绍的语句:
select   @dt1   datetime,@dt2   datetime

select   @dt1= '2003-12-05 ',@dt2= '2006-02-28 '
select   *   from   @t
where   dateadd(year,datediff(year,birthday,@dt1),birthday)
between   @dt1   and   @dt2
or   dateadd(year,datediff(year,birthday,@dt1),birthday)
between   @dt1   and   @dt2

2003-12-05到2006-02-28之间肯定是所有的人都会在这段时间内生日,但是用这种方法就不能查出出生日期为1984-10-13或者1984-5-4的记录,请问怎么改进这种方法以满足我的要求???

------解决方案--------------------
declare @t table(birthday datetime)
insert into @t values( '1984-07-01 ')
declare @dt1 datetime,@dt2 datetime

select @dt1= '2003-12-05 ',@dt2= '2004-02-28 '
select * from @t
where dateadd(year,datediff(year,birthday,@dt1),birthday)
between @dt1 and @dt2
or dateadd(year,datediff(year,birthday,@dt2),birthday) --这里改成@dt2
between @dt1 and @dt2
------解决方案--------------------
2003-12-05到2006-02-28之间肯定是所有的人都会在这段时间内生日,但是用这种方法就不能查出出生日期为1984-10-13或者1984-5-4的记录,请问怎么改进这种方法以满足我的要求???
----------
这两个出生日期的记录为什么能查出来?不在查询范围之内啊
------解决方案--------------------
declare @t table(birthday datetime)
insert into @t values( '1984-07-01 ')
declare @dt1 datetime,@dt2 datetime

select @dt1= '2004-07-01 ',@dt2= '2004-07-07 '

select * from @t
where dateadd(year,datediff(year,birthday,@dt1),birthday)
between @dt1 and @dt2
or dateadd(year,datediff(year,birthday,@dt2),birthday)
between @dt1 and @dt2

7月1日生日,当然不在12-05跟02-28之间