Jeśli chcesz wyodrębnić numer tygodnia ISO z daty w SQL Server, możesz użyć iso_week
argument podczas wywoływania DATEPART()
funkcjonować. Możesz alternatywnie użyć isowk
lub isoww
argumenty, aby zrobić to samo.
Przez „tydzień ISO” mam na myśli standard daty i czasu ISO 8601.
Tygodnie ISO zaczynają się w poniedziałki, a pierwszy tydzień roku zawiera 4 stycznia tego roku. Dlatego możliwe jest, że daty na początku stycznia będą częścią 52. lub 53. tygodnia poprzedniego roku, a daty pod koniec grudnia będą częścią pierwszego tygodnia następnego roku.
Oznacza to, że po wyodrębnieniu numeru tygodnia z daty możesz uzyskać różne wyniki w zależności od tego, czy używasz kalendarza gregoriańskiego, czy standardu daty i czasu ISO 8601.
Przykład
DECLARE @date date = '2021-01-01';
SELECT DATEPART(iso_week, @date);
Wynik:
53
W tym przypadku data to 1 stycznia 2021 r., ale w kategoriach ISO jest to 53 tydzień 2020 r.
Porównanie z gregoriańskim
Oto kolejny przykład, aby porównać go z tygodniem gregoriańskim.
DECLARE @date date = '2021-01-01';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Wynik:
+--------+------------+ | week | iso_week | |--------+------------| | 1 | 53 | +--------+------------+
Widzimy więc, że ta sama data może mieć inny numer tygodnia w zależności od tego, czy używamy kalendarza gregoriańskiego, czy standardu ISO.
Możemy zrobić to samo z datą pod koniec poprzedniego roku.
DECLARE @date date = '2020-12-27';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Wynik:
+--------+------------+ | week | iso_week | |--------+------------| | 53 | 52 | +--------+------------+
Alternatywne argumenty
Jak wspomniano, można alternatywnie użyć isowk
lub isoww
aby zwrócić numer tygodnia ISO.
DECLARE @date date = '2021-01-01';
SELECT
DATEPART(iso_week, @date) AS iso_week,
DATEPART(isowk, @date) AS isowk,
DATEPART(isoww, @date) AS isoww;
Wynik:
+------------+---------+---------+ | iso_week | isowk | isoww | |------------+---------+---------| | 53 | 53 | 53 | +------------+---------+---------+