Wenn Sie die ISO-Wochennummer aus einem Datum in SQL Server extrahieren müssen, können Sie iso_week
verwenden Argument beim Aufruf von DATEPART()
Funktion. Alternativ können Sie den isowk
verwenden oder isoww
Argumente, dasselbe zu tun.
Mit „ISO-Woche“ beziehe ich mich auf den ISO 8601-Standard für Datum und Uhrzeit.
ISO-Wochen beginnen montags und die erste Woche eines Jahres enthält den 4. Januar dieses Jahres. Daher ist es möglich, dass Termine Anfang Januar Teil der 52. oder 53. Woche des Vorjahres und Termine Ende Dezember Teil der ersten Woche des nächsten Jahres sind.
Das bedeutet, dass Sie beim Extrahieren der Wochennummer aus einem Datum möglicherweise unterschiedliche Ergebnisse erhalten, je nachdem, ob Sie den gregorianischen Kalender oder den ISO 8601-Standard für Datum und Uhrzeit verwenden.
Beispiel
DECLARE @date date = '2021-01-01';
SELECT DATEPART(iso_week, @date);
Ergebnis:
53
In diesem Fall ist das Datum der 1. Januar 2021, aber in ISO-Begriffen ist es die 53. Woche des Jahres 2020.
Vergleich mit Gregorianisch
Hier ist ein weiteres Beispiel, um es mit der gregorianischen Woche zu vergleichen.
DECLARE @date date = '2021-01-01';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Ergebnis:
+--------+------------+ | week | iso_week | |--------+------------| | 1 | 53 | +--------+------------+
So können wir sehen, dass dasselbe Datum eine andere Wochennummer haben kann, je nachdem, ob wir den gregorianischen Kalender oder den ISO-Standard verwenden.
Wir können dasselbe mit einem Datum gegen Ende des Vorjahres machen.
DECLARE @date date = '2020-12-27';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Ergebnis:
+--------+------------+ | week | iso_week | |--------+------------| | 53 | 52 | +--------+------------+
Alternative Argumente
Wie erwähnt, kann alternativ auch der isowk
verwendet werden oder isoww
um die ISO-Wochennummer zurückzugeben.
DECLARE @date date = '2021-01-01';
SELECT
DATEPART(iso_week, @date) AS iso_week,
DATEPART(isowk, @date) AS isowk,
DATEPART(isoww, @date) AS isoww;
Ergebnis:
+------------+---------+---------+ | iso_week | isowk | isoww | |------------+---------+---------| | 53 | 53 | 53 | +------------+---------+---------+