Okej, więc mam raport, który porównuje ten tydzień do zeszłego tygodnia, a nasz klient zauważył, że ich dane były „funky”. Po dalszym dochodzeniu ustaliliśmy, że tygodnie nie przebiegały prawidłowo zgodnie ze standardami ISO. Uruchomiłem ten skrypt jako przypadek testowy.
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')
Po uruchomieniu otrzymałem te wyniki.
Pomyślałem, że to dziwne, więc zacząłem więcej kopać i odkryłem, że SQL Server liczy 1 stycznia jako pierwszy tydzień roku, a ISO liczy pierwszą niedzielę stycznia jako pierwszy tydzień roku.
Pytanie kończy się podwójnie. Pytanie 1 dlaczego to jest? Pytanie 2 czy jest jakiś sposób, aby to zmienić, więc nie muszę modyfikować całego mojego kodu, aby używać go ISO_Week
wszędzie?