我想计算两个日期之间的周差,如果两个日期的前一个星期日相同,则两个日期被视为同一周的一部分。理想情况下,我想使用 来执行此操作DATEDIFF
,而不是学习复杂的习语来计算值。但是当涉及数周时,我不知道它是如何工作的。
SET DATEFIRST 7
以下查询返回 1 和 2。如果您的日历周从星期日开始,即如果您预先运行或@@DATEFIRST
默认情况下为 7,这可能是有意义的。
SET DATEFIRST 7;
-- SET DATEFIRST 1;
DECLARE
@d1 DATETIME,
@d2a DATETIME,
@d2b DATETIME
;
SELECT
@d1 = '2010-04-05', -- Monday
@d2a = '2010-04-16', -- Following Friday
@d2b = '2010-04-18' -- the Sunday following
;
SELECT
DATEDIFF(week, @d1, @d2a) AS weekdiff_a -- returns 1
,DATEDIFF(week, @d1, @d2b) AS weekdiff_b -- returns 2
;
因此,如果SET DATEFIRST 1
执行而不是SET DATEFIRST 7
. 但是返回值是一样的,不管!
这里发生了什么?我应该怎么做才能获得正确的周差?