Ok, quindi ho un rapporto che fa un confronto tra questa settimana e la scorsa settimana e i nostri clienti hanno notato che i loro dati erano "funky". A seguito di ulteriori indagini, abbiamo scoperto che non stava facendo settimane correttamente secondo gli standard ISO. Ho eseguito questo script come test case.
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')
Durante l'esecuzione ho ottenuto questi risultati.
Ho pensato che fosse strano e così ho fatto qualche altro scavo e ho scoperto che SQL Server conta il 1 ° gennaio come la prima settimana dell'anno in cui ISO conta la prima domenica di gennaio come la prima settimana dell'anno.
La domanda finisce per essere duplice. Domanda 1: perché? Domanda 2: c'è un modo per cambiarlo, quindi non devo modificare tutto il mio codice per usarlo ISO_Week
ovunque?