Итак, у меня есть отчет, который сравнивает эту неделю с прошлой, и наши клиенты заметили, что их данные были «фанки». После дальнейшего расследования мы обнаружили, что в соответствии со стандартами 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
везде?
Есть несколько властей, предполагающих разные условия для первой недели года. Некоторые предполагают, что первый день недели начинается с первой недели, но наиболее распространенная идея заключается в том, что первая неделя с первым четвергом - это первая неделя года.
Так
ISO_WEEK
признает , что и как в 2010, 2011 или 2012 , как вы можете проверить , чтоISO_WEEK
говорит 1 января будет пятьдесят второй или пятьдесят третьей неделе во времяWEEK
илиWK
илиWW
говорит , что они в первую неделю.источник