Okay, ich habe einen Bericht, der einen Vergleich zwischen dieser Woche und der letzten Woche macht, und unser Kunde hat bemerkt, dass seine Daten "funky" waren. Bei weiteren Untersuchungen stellten wir fest, dass es nach den ISO-Standards wochenlang nicht richtig lief. Ich habe dieses Skript als Testfall ausgeführt.
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')
Beim Laufen habe ich diese Ergebnisse erhalten.
Ich fand das merkwürdig und machte einige weitere Grabungen. Dabei stellte ich fest, dass SQL Server den 1. Januar als erste Woche des Jahres zählt, während ISO den ersten Sonntag im Januar als erste Woche des Jahres zählt.
Die Frage ist dann zweifach. Frage 1 warum ist das so? Frage 2: Gibt es eine Möglichkeit, dies zu ändern, damit ich nicht meinen gesamten Code ändern muss, um ihn ISO_Week
überall zu verwenden ?
In der ersten Woche des Jahres gehen mehrere Behörden von unterschiedlichen Bedingungen aus. Einige gehen davon aus, dass der erste Wochentag mit der ersten Woche beginnt, aber die häufigste Idee ist, dass die erste Woche mit dem ersten Donnerstag die erste Woche des Jahres ist.
So
ISO_WEEK
akzeptiert , dass und wie in 2010, 2011 oder 2012 , wie Sie können überprüfen , dassISO_WEEK
sagt 1. Januar ist der 52. oder der 53. Woche , währendWEEK
oderWK
oderWW
sagt , dass sie in der ersten Woche sind.quelle