DATEDIFF 如何计算 SQL Server 2005 中的周差?

eks*_*tso 5 sql-server idioms datediff

我想计算两个日期之间的差,如果两个日期的前一个星期日相同,则两个日期被视为同一周的一部分。理想情况下,我想使用DATEDIFF,而不是学习精心设计的习语来计算值。但是当涉及数周时,我不知道它是如何工作的。

以下查询返回 1 和 2。如果您的日历周以星期日开始,即如果您SET DATEFIRST 7预先运行或@@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
;
Run Code Online (Sandbox Code Playgroud)

因此,如果SET DATEFIRST 1执行而不是SET DATEFIRST 7. 但不管怎样,返回值都是一样的!

这里发生了什么?我应该怎么做才能获得正确的周差?

ric*_*ent 5

DATEDIFF 不遵守 DATEFIRST 设置。

这是一个类似的问题,有一个潜在的解决方法:

是否可以为 T-SQL DATEDIFF 函数设置一周的开始?