sql >> Database >  >> RDS >> Sqlserver

Retourneer het ISO-weeknummer van een datum in SQL Server (T-SQL)

Als u het ISO-weeknummer uit een datum in SQL Server moet halen, kunt u de iso_week gebruiken argument bij het aanroepen van de DATEPART() functie. U kunt ook de isowk . gebruiken of isoww argumenten om hetzelfde te doen.

Met "ISO-week" verwijs ik naar de ISO 8601-norm voor datum en tijd.

ISO-weken beginnen op maandag en de eerste week van een jaar bevat 4 januari van dat jaar. Daarom is het mogelijk dat data van begin januari deel uitmaken van de 52e of 53e week van het voorgaande jaar en data van eind december tot de eerste week van het volgende jaar.

Dit betekent dat wanneer u het weeknummer uit een datum haalt, u verschillende resultaten kunt krijgen, afhankelijk van of u de Gregoriaanse kalender of de ISO 8601 datum- en tijdstandaard gebruikt.

Voorbeeld

DECLARE @date date = '2021-01-01';
SELECT DATEPART(iso_week, @date);

Resultaat:

53

In dit geval is de datum 1 januari 2021, maar in ISO-termen is dit de 53e week van 2020.

Vergelijking met Gregoriaans

Hier is nog een voorbeeld om het te vergelijken met de Gregoriaanse week.

DECLARE @date date = '2021-01-01';
SELECT 
  DATEPART(week, @date) AS week,
  DATEPART(iso_week, @date) AS iso_week;

Resultaat:

+--------+------------+
 | week   | iso_week   |
 |--------+------------|
 | 1      | 53         |
 +--------+------------+ 

We kunnen dus zien dat dezelfde datum een ​​ander weeknummer kan hebben, afhankelijk van of we de Gregoriaanse kalender of de ISO-standaard gebruiken.

We kunnen hetzelfde doen met een datum tegen het einde van het voorgaande jaar.

DECLARE @date date = '2020-12-27';
SELECT 
  DATEPART(week, @date) AS week,
  DATEPART(iso_week, @date) AS iso_week;

Resultaat:

+--------+------------+
 | week   | iso_week   |
 |--------+------------|
 | 53     | 52         |
 +--------+------------+ 

Alternatieve argumenten

Zoals vermeld, kan als alternatief de isowk . worden gebruikt of isoww om het ISO-weeknummer te retourneren.

DECLARE @date date = '2021-01-01';
SELECT 
    DATEPART(iso_week, @date) AS iso_week,
    DATEPART(isowk, @date) AS isowk,
    DATEPART(isoww, @date) AS isoww;

Resultaat:

+------------+---------+---------+
 | iso_week   | isowk   | isoww   |
 |------------+---------+---------|
 | 53         | 53      | 53      |
 +------------+---------+---------+ 

  1. Pgbackrest Herstellen en herstellen Delta

  2. Verbinding maken met SQL Server met Windows-authenticatie van Node.JS met behulp van de mssql-module

  3. XAMPP - MySQL wordt onverwacht afgesloten

  4. De 9 meest voorkomende fouten bij het ontwerpen van databases