为什么DATEDIFF wk每周显示6天?

时间:2016-06-03 14:27:08

标签: sql sql-server tsql

我使用DATEADD(ww, DATEDIFF(ww, 0, GETDATE()), 0)来获得本周的开始来运行几个报告,但是当它在星期天运行时,它使用的是即将到来的一周,而不是当前的一周。当我运行以下内容时,我对结果感到困惑,因为它显示即使Day Diff为6,本周diff也是1而不是Zero。为什么会这样?

SELECT DATEDIFF(WEEK, '20160527', GETDATE()) Wks, DATEDIFF(Day, '20160527', GETDATE()) Dys
SELECT DATEDIFF(WEEK, '20160528', GETDATE()) Wks, DATEDIFF(DAY, '20160528', GETDATE()) Dys
SELECT DATEDIFF(WEEK, '20160529', GETDATE()) Wks,DATEDIFF(Day, '20160529', GETDATE()) Dys
SELECT DATEDIFF(WEEK, '20160530', GETDATE()) Wks,DATEDIFF(DAY, '20160530', GETDATE()) Dys

Results

1 个答案:

答案 0 :(得分:4)

DATEDIFF显示交叉边界的数量,而不是实际的时间差异,因此可能会导致一些“奇怪”的行为,具体取决于天数下降的时间。正如Damien_The_Unbeliever指出的那样,几个星期一周的开始时间始终被认为是DATEDIFF的星期日。

例如,从星期六到星期日,即使只是一天,它仍会显示DATEDIFF为1周。

同样地,从上午12:01到晚上11:59,DATEDIFF为0天,但是晚上11:59到12:01是DATEDIFF为1天。< / p>