Как DATEDIFF рассчитывает недельные различия в SQL Server 2005? - PullRequest
3 голосов
/ 27 апреля 2010

Я хотел бы рассчитать разницу в неделях между двумя датами, где две даты считаются частью одной недели, если их предыдущее воскресенье совпадает. В идеале я хотел бы сделать это, используя 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 7 выполняется SET DATEFIRST 1. Но возвращаемые значения одинаковы, независимо!

Что здесь происходит? Что я должен сделать, чтобы получить правильные различия по неделям?

1 Ответ

3 голосов
/ 27 апреля 2010

DATEDIFF не соответствует настройке DATEFIRST.

Вот похожий вопрос с потенциальным обходным путем:

Можно ли установить начало недели для функции T-SQL DATEDIFF?

...