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