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

DATEDIFF 计算天数时跨闰年时会出错误
本帖最后由 wizard_zq 于 2013-12-02 11:45:02 编辑
今天无意中测试了下DATEDIFF这个函数
因为明年就是闰年嘛,所以写了个简单的测试语句,发现了这个问题

DECLARE @date1 datetime
DECLARE @date2 datetime
SET  @date1=GETDATE() 
SET  @date2=DATEADD(yyyy,1,@date1)
SELECT GETDATE()
SELECT DATEADD(YYYY,1,@date1) AS A
select DATEDIFF(DD,@date1,@date2) 

最后一条语句的查询结果竟然是365!而不是366!

我想问下如果碰到这种要统计的时间之前存在闰年,怎么处理这个天数间隔问题?我想这种情况应该会经常出现吧?难道要写一堆判断的语句来判断,再来计算?有没有其他的简便点的方法?

 
SQL函数

------解决方案--------------------
明年是闰年吗?
------解决方案--------------------
2014年不是闰年。

2016年是闰年:
select DATEDIFF(DAY,'2016-01-01','2017-01-01')
/*
366
*/