Hvis du har brug for at udtrække ISO-ugenummeret fra en dato i SQL Server, kan du bruge iso_week
argument, når du kalder DATEPART()
fungere. Du kan alternativt bruge isowk
eller isoww
argumenter for at gøre det samme.
Med "ISO uge" refererer jeg til ISO 8601 dato- og klokkeslætsstandarden.
ISO-uger starter om mandagen, og den første uge i et år indeholder den 4. januar det pågældende år. Derfor er det muligt, at datoer i begyndelsen af januar er en del af den 52. eller 53. uge i det foregående år, og at datoer i slutningen af december er en del af den første uge i det næste år.
Det betyder, at når du uddrager ugenummeret fra en dato, kan du få forskellige resultater, afhængigt af om du bruger den gregorianske kalender eller ISO 8601 dato- og klokkeslætsstandarden.
Eksempel
DECLARE @date date = '2021-01-01';
SELECT DATEPART(iso_week, @date);
Resultat:
53
I dette tilfælde er datoen 1. januar 2021, men i ISO-sammenhæng er det den 53. uge i 2020.
Sammenligning med gregoriansk
Her er endnu et eksempel for at sammenligne det med den gregorianske uge.
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, at den samme dato kan have et andet ugenummer afhængigt af, om vi bruger den gregorianske kalender eller ISO-standarden.
Vi kan gøre det samme med en dato tæt på slutningen af det foregå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 | +--------+------------+
Alternative argumenter
Som nævnt kan alternativt bruge isowk
eller isoww
for at returnere ISO-ugenummeret.
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 | +------------+---------+---------+