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

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

问题描述:

我想计算两个日期之间的差异,如果两个日期的前一个星期日相同,则两个日期被视为同一周的一部分。理想情况下,我想用DATEDIFF这样做,而不是学习一个精心制作的习惯用法来计算价值。但是当涉及到数周时,我无法分辨它是如何工作的。DATEDIFF如何计算SQL Server 2005中的星期差异?

以下查询返回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不同的结果。但返回值是相同的,无论如何!

这是怎么回事?我应该怎么做才能获得正确的周差?

DATEDIFF不尊重DATEFIRST设置。

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

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

+1

感谢您指出我在正确的方向。在你的帮助下,我能够找到解决我的问题的可靠方案。 – eksortso 2010-04-27 00:26:34