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