Итак, у меня есть отчет, который сравнивает эту неделю с прошлой, и наши клиенты заметили, что их данные были «фанки». После дальнейшего расследования мы обнаружили, что в соответствии со стандартами ISO он неделями работал неправильно. Я запустил этот скрипт как тестовый пример.
SET DATEFIRST 1
SELECT DATEPART(WEEK, '3/26/13')
, DATEPART(WEEK, '3/27/12')
, DATEPART(WEEK, '3/20/12')
, DATEPART(WEEK, '1/2/12')
SELECT DATEPART(ISO_WEEK, '3/26/13')
, DATEPART(ISO_WEEK, '3/27/12')
, DATEPART(ISO_WEEK, '3/20/12')
, DATEPART(ISO_WEEK, '1/2/12')
При запуске я получил эти результаты.
Я подумал, что это необычно, поэтому я провел еще несколько копаний и обнаружил, что SQL Server считает 1 января первой неделей года, когда ISO считает первое воскресенье января первой неделей года.
Тогда вопрос оказывается в два раза. Вопрос 1 почему это? Вопрос 2 есть ли способ изменить это, поэтому мне не нужно изменять весь мой код для использования ISO_Week
везде?