Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zurückgeben der ISO-Wochennummer von einem Datum in SQL Server (T-SQL)

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      |
 +------------+---------+---------+