D'accord, j'ai un rapport qui fait une comparaison cette semaine par rapport à la semaine dernière et notre client a remarqué que leurs données étaient "géniales". Après un examen plus approfondi, nous avons constaté qu'il ne fonctionnait pas correctement conformément aux normes ISO. J'ai exécuté ce script en tant que test.
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')
Quand couru j'ai eu ces résultats.
Je pensais que c'était étrange et j'ai donc creusé un peu plus et j'ai constaté que SQL Server comptait le 1er janvier comme première semaine de l'année, alors qu'ISO comptait le premier dimanche de janvier comme première semaine de l'année.
La question finit alors par être double. Question 1 pourquoi est-ce? Question 2: Y a-t-il un moyen de changer cela afin que je ne doive pas modifier tout mon code pour l'utiliser ISO_Week
partout?
Plusieurs autorités supposent des conditions différentes pour la première semaine de l'année. Certains supposent que le premier jour de la semaine commence la première semaine, mais l'idée la plus commune est que la première semaine du premier jeudi est la première semaine de l'année.
Donc
ISO_WEEK
accepte cela et comme en 2010, 2011 ou 2012, vous pouvez vérifier que leISO_WEEK
1er janvier est la 52ème ou la 53ème semaine alors queWEEK
ouWK
ouWW
dit qu'ils sont la première semaine.la source