Ok, então eu tenho um relatório que faz uma comparação desta semana com a semana passada e nosso cliente percebeu que seus dados estavam "descolados". Após uma investigação mais aprofundada, descobrimos que as semanas não estavam funcionando corretamente de acordo com os padrões ISO. Eu executei esse script como um caso de teste.
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')
Quando executado, obtive esses resultados.
Eu pensei que isso era peculiar e, portanto, fiz mais algumas pesquisas e descobri que o SQL Server conta em 1º de janeiro como a primeira semana do ano em que a ISO conta no primeiro domingo de janeiro como a primeira semana do ano.
A questão acaba sendo duas vezes. Pergunta 1 por que isso? Pergunta 2: existe alguma maneira de mudar isso, para que eu não precise modificar todo o meu código para usar em ISO_Week
qualquer lugar?
Existem várias autoridades assumindo condições diferentes para a primeira semana do ano. Alguns assumem que o primeiro dia da semana começa na primeira semana, mas a idéia mais comum é que a primeira semana que tem a primeira quinta-feira seja a primeira semana do ano.
Portanto,
ISO_WEEK
aceita isso e, como em 2010, 2011 ou 2012, como você pode verificar,ISO_WEEK
dizendo que 1º de janeiro é a 52a ou 53a semana, enquantoWEEK
ouWK
ouWW
diz que são a primeira semana.fonte