好的,所以这是一个看似显而易见的问题,但我还没有完全关注......
我在一堆日期上运行了以下代码:
SELECT
DATEDIFF(DAY, Start, [End]) AS DIFD,
DATEDIFF(WEEK, Start, [End]) AS DIFW,
DATEDIFF(Month, Start, [End]) AS DIFM,
DATEDIFF(Year, Start, [End]) AS DIFY
FROM
Datetest
以下是我看到的结果:
Start End Description DIFD DIFW DIFM DIFY
2010-03-25 2011-03-25 Normal Year 365 52 12 1
2011-03-25 2012-03-25 Leap Year 366 53 12 1
2010-03-24 2011-03-25 Add 1 day 366 52 12 1
2010-03-24 2011-03-26 Add 2 day 367 52 12 1
2010-03-24 2011-03-27 3 days 368 53 12 1
2010-03-24 2011-03-28 4 days 369 53 12 1
2010-03-24 2011-03-29 5 days 370 53 12 1
2010-03-24 2011-03-30 6 days 371 53 12 1
2010-03-24 2011-03-31 7 days 372 53 12 1
因此,唯一有意义的是日期差异。
几周以来,它没有设法识别出366天的闰年并将其归类为53周但是继续进行并将第3条记录归类为仅有52周时的相同数量几天?
同样,我也不了解月份和年份。我从第3次记录开始就想到,这将是13个月或2年?
答案 0 :(得分:6)
返回指定datepart的count(有符号整数) 边界在指定的startdate和enddate之间交叉。
这里的关键词是" boundary"。
一周的边界取决于服务器设置(周可以在周日或周一或任何其他日期开始)。见SET DATEFIRST
月份的边界是该月的第1天,多年的边界是1月1日。
例如,两者
DATEDIFF(Year, '2010-03-24', '2011-03-24')
DATEDIFF(Year, '2010-01-01', '2011-12-31')
将返回1,因为在上述两个日期范围之间只有1月1日。
答案 1 :(得分:4)
DATEDIFF
函数不会计算确切的数字然后再舍入。它计算边界交叉。例如,DATEDIFF(YEAR, '2016-01-01', '2016-12-31')
实际上是0。