日期:2014-05-17  浏览次数:20437 次

SQLSERVER平年和闰年时间差
在SQLSERVER中我要获取两个时间的间隔我用select  top 10 name,bigclassid , birthday   from   [user] where  leave='NO'  and  replace(birthday,year(birthday),year(getdate()))-getdate() between   -1   and  6  order by month(birthday),DAY(birthday) asc但是提示报错“从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。”错误原因是数据库中有条数据是‘1992-02-29’这是闰年,但今年是平年2月没有29号。这个问题如何解决

------解决方案--------------------
加条件:isdate(birthday)=1

select  top 10 name,bigclassid , birthday   
from   [user] 
where  leave='NO'  and  replace(birthday,year(birthday),year(getdate()))-getdate() between   -1   and  6  and isdate(birthday)=1
order by month(birthday),DAY(birthday) asc
------解决方案--------------------
select  top 10 name,bigclassid , birthday   
from   [user] 
where  leave='NO'  and  
datediff(day,dateadd(yy,DATEDIFF(yy, birthday, GETDATE()),birthday),dateadd(day,6,getdate())) between 0 and 6
order by month(birthday),DAY(birthday) asc