Добре, тому у мене є звіт, який робить порівняння цього тижня проти минулого тижня, і наш клієнт помітив, що їхні дані були "фанк". Після подальшого розслідування ми з'ясували, що це не робило тижнів правильно відповідно до стандартів 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
скрізь?