【问题标题】:How does DATEDIFF calculate week differences in SQL Server 2005?DATEDIFF 如何计算 SQL Server 2005 中的周差?
【发布时间】:2010-04-26 21:47:39
【问题描述】:

我想计算两个日期之间的差异,如果两个日期的前一个星期日相同,则两个日期被视为同一周的一部分。理想情况下,我想使用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,我预计会有不同的结果。但是返回值是一样的,不管!

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

【问题讨论】:

    标签: sql-server idioms datediff


    【解决方案1】:

    DATEDIFF 不遵守 DATEFIRST 设置。

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

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

    【讨论】:

    • 感谢您为我指明正确的方向。在您的帮助下,我找到了解决问题的有效解决方案。
    猜你喜欢
    • 2016-05-05
    • 2015-02-10
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多