Pokud potřebujete extrahovat číslo týdne ISO z data na serveru SQL Server, můžete použít iso_week
argument při volání DATEPART()
funkce. Alternativně můžete použít isowk
nebo isoww
argumenty pro totéž.
Termínem „týden ISO“ mám na mysli normu data a času ISO 8601.
Týdny ISO začínají v pondělí a první týden v roce obsahuje 4. leden daného roku. Proto je možné, že data na začátku ledna budou součástí 52. nebo 53. týdne předchozího roku a data na konci prosince budou součástí prvního týdne příštího roku.
To znamená, že když z data extrahujete číslo týdne, můžete získat různé výsledky v závislosti na tom, zda používáte gregoriánský kalendář nebo normu data a času ISO 8601.
Příklad
DECLARE @date date = '2021-01-01';
SELECT DATEPART(iso_week, @date);
Výsledek:
53
V tomto případě je datum 1. leden 2021, ale podle ISO je to 53. týden roku 2020.
Srovnání s gregoriánským
Zde je další příklad pro srovnání s gregoriánským týdnem.
DECLARE @date date = '2021-01-01';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Výsledek:
+--------+------------+ | week | iso_week | |--------+------------| | 1 | 53 | +--------+------------+
Vidíme tedy, že stejné datum může mít jiné číslo týdne v závislosti na tom, zda používáme gregoriánský kalendář nebo normu ISO.
Totéž můžeme udělat s datem blízko konce předchozího roku.
DECLARE @date date = '2020-12-27';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Výsledek:
+--------+------------+ | week | iso_week | |--------+------------| | 53 | 52 | +--------+------------+
Alternativní argumenty
Jak bylo zmíněno, lze alternativně použít isowk
nebo isoww
vrátíte číslo týdne 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;
Výsledek:
+------------+---------+---------+ | iso_week | isowk | isoww | |------------+---------+---------| | 53 | 53 | 53 | +------------+---------+---------+