V MySQL můžete použít WEEK()
funkce pro získání čísla týdne pro dané datum. „Číslem týdne“ myslím týden v roce.
Chcete-li funkci použít, jednoduše zadejte datum jako argument a vrátí se číslo týdne.
Máte také možnost určit, zda má týden začínat neděli nebo pondělí a zda má být týden v rozsahu 0 až 53 nebo 1 až 53.
Syntaxe
Syntaxe vypadá takto:
WEEK(date[,mode])
Kde:
date
je datum, ze kterého chcete vrátit číslo týdne.mode
je číslo, které určuje, zda má týden začínat v neděli nebo pondělí a zda má být týden v rozsahu 0 až 53 nebo 1 až 53. Možné hodnoty režimu naleznete v tabulce níže.
Příklad 1 – Základní použití
Zde je příklad k demonstraci.
SELECT WEEK('2021-01-25') As 'Week Number';
Výsledek:
+-------------+ | Week Number | +-------------+ | 4 | +-------------+
Zde je příklad s datem blízko konce roku.
SELECT WEEK('2021-12-25') As 'Week Number';
Výsledek:
+-------------+ | Week Number | +-------------+ | 51 | +-------------+
Příklad 2 – Určení režimu
Pokud neurčíte druhý argument, WEEK()
funkce používá režim určený default_week_format
systémová proměnná. Výchozí hodnota této proměnné je 0
.
Máte však také možnost zadat druhý argument, který určí, který režim se má použít. Příklad:
SELECT WEEK('2019-10-17', 7) AS 'Mode 7';
Výsledek:
+--------+ | Mode 7 | +--------+ | 41 | +--------+
Možné hodnoty režimu jsou následující.
Režim | První den týdne | Rozsah | Týden 1 je prvním týdnem… |
---|---|---|---|
0 | Neděle | 0–53 | s nedělí v tomto roce |
1 | pondělí | 0–53 | se 4 nebo více dny v tomto roce |
2 | Neděle | 1-53 | s nedělí v tomto roce |
3 | pondělí | 1-53 | se 4 nebo více dny v tomto roce |
4 | Neděle | 0–53 | se 4 nebo více dny v tomto roce |
5 | pondělí | 0–53 | s pondělím v tomto roce |
6 | Neděle | 1-53 | se 4 nebo více dny v tomto roce |
7 | pondělí | 1-53 | s pondělím v tomto roce |
Pro hodnoty režimu, kde týden 1 je první týden „se 4 nebo více dny v tomto roce“, jsou týdny číslovány podle ISO 8601:1988:
- Pokud má týden obsahující 1. leden 4 nebo více dní v novém roce, jedná se o týden 1.
- Jinak je to poslední týden předchozího roku a další týden je týden 1.
Příklad 3 – Porovnání režimů
Zde je rychlé srovnání toho, jak můžete získat různé výsledky v závislosti na používaném režimu.
Následující tři příklady používají stejný kód, ale se třemi různými daty. Tato data jdou po sobě – nastávají 5., 6. a 7. ledna. Jak vidíte, výsledky se mohou značně lišit v závislosti na přesném datu a použitém režimu.
Datum 1
SET @date = '2019-01-05'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Výsledek:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 1 | 52 | 1 | 1 | 0 | 1 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Datum 2
SET @date = '2019-01-06'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Výsledek:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 1 | 1 | 1 | 2 | 0 | 2 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
Datum 3
SET @date = '2019-01-07'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
Výsledek:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | +--------+--------+--------+--------+--------+--------+--------+--------+