2010-04-26 2 views
3

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

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

ответ

Смежные вопросы