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

时间:2010-04-26 21:47:39

标签: 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
;

因此,如果执行SET DATEFIRST 1而不是SET DATEFIRST 7,我预计会有不同的结果。但无论如何,返回值都是相同的!

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

1 个答案:

答案 0 :(得分:3)

DATEDIFF不尊重DATEFIRST设置。

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

Is it possible to set start of week for T-SQL DATEDIFF function?