Bien, tengo un informe que hace una comparación esta semana contra la semana pasada y nuestro cliente notó que sus datos eran "originales". Tras una investigación adicional, descubrimos que no funcionaba correctamente de acuerdo con las normas ISO. Ejecuté este script como un caso de prueba.
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')
Cuando corrí obtuve estos resultados.
Pensé que esto era peculiar, así que investigué un poco más y descubrí que SQL Server cuenta el 1 de enero como la primera semana del año, donde ISO cuenta el primer domingo de enero como la primera semana del año.
La pregunta entonces termina siendo doble. Pregunta 1 ¿por qué es esto? Pregunta 2 ¿hay alguna forma de cambiar esto para que no tenga que modificar todo mi código para usarlo en ISO_Week
todas partes?
Hay varias autoridades que asumen condiciones diferentes para la primera semana del año. Algunos suponen que el primer día de la semana comienza la primera semana, pero la idea más común es que la primera semana que tiene el primer jueves es la primera semana del año.
Por lo tanto
ISO_WEEK
acepta que y al igual que en 2010, 2011 o 2012 como se puede comprobar queISO_WEEK
dice 1 ª enero es 52ª o 53ª semana mientrasWEEK
oWK
oWW
dice que son la primera semana.fuente