Om du behöver extrahera ISO-veckans nummer från ett datum i SQL Server kan du använda iso_week
argument vid anrop av DATEPART()
fungera. Du kan alternativt använda isowk
eller isoww
argument för att göra samma sak.
Med "ISO-vecka" syftar jag på ISO 8601-standarden för datum och tid.
ISO-veckorna börjar på måndagar och den första veckan på ett år innehåller den 4 januari samma år. Därför är det möjligt att datum i början av januari är en del av den 52:a eller 53:e veckan föregående år, och att datum i slutet av december är en del av den första veckan nästa år.
Det betyder att när du extraherar veckonumret från ett datum kan du få olika resultat beroende på om du använder den gregorianska kalendern eller ISO 8601-datum- och tidsstandarden.
Exempel
DECLARE @date date = '2021-01-01';
SELECT DATEPART(iso_week, @date);
Resultat:
53
I det här fallet är datumet 1 januari 2021, men i ISO-termer är det den 53:e veckan 2020.
Jämförelse med gregoriansk
Här är ett annat exempel för att jämföra det med den gregorianska veckan.
DECLARE @date date = '2021-01-01';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Resultat:
+--------+------------+ | week | iso_week | |--------+------------| | 1 | 53 | +--------+------------+
Så vi kan se att samma datum kan ha ett annat veckonummer beroende på om vi använder den gregorianska kalendern eller ISO-standarden.
Vi kan göra samma sak med ett datum nära slutet av föregående år.
DECLARE @date date = '2020-12-27';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Resultat:
+--------+------------+ | week | iso_week | |--------+------------| | 53 | 52 | +--------+------------+
Alternativa argument
Som nämnt, kan alternativt använda isowk
eller isoww
för att returnera ISO-veckans nummer.
DECLARE @date date = '2021-01-01';
SELECT
DATEPART(iso_week, @date) AS iso_week,
DATEPART(isowk, @date) AS isowk,
DATEPART(isoww, @date) AS isoww;
Resultat:
+------------+---------+---------+ | iso_week | isowk | isoww | |------------+---------+---------| | 53 | 53 | 53 | +------------+---------+---------+