V MariaDB, YEARWEEK()
je vestavěná funkce data a času, která vrací rok a týden pro dané datum.
Přijímá dva argumenty; datum, ze kterého chcete extrahovat rok a týden, a volitelný argument režimu pro určení režimu, který se má ve výsledku použít.
Vrátí týden jako číslo v rozsahu 0
až 53
nebo 1
až 53
, v závislosti na používaném režimu. Rok ve výsledku se také může lišit od roku v argumentu data pro první a poslední týden roku.
Syntaxe
Syntaxe vypadá takto:
YEARWEEK(date), YEARWEEK(date,mode)
Což by se dalo vyjádřit i takto:
YEARWEEK(date[,mode])
Kde date
je výraz data, ze kterého se získá rok a týden, a mode
je volitelný argument, který vám umožňuje určit režim, který se má použít.
Režimy
Volitelný mode
argument určuje, zda týden začíná v neděli nebo pondělí a zda má být vrácená hodnota v rozsahu od 0
až 53
nebo od 1
až 53
.
Argument režimu může být kterýkoli z následujících:
Režim | 1. den v týdnu | Rozsah | Týden 1 je 1. týden s… |
---|---|---|---|
0 | Neděle | 0–53 | neděle v tomto roce |
1 | pondělí | 0–53 | více než 3 dny v tomto roce |
2 | Neděle | 1-53 | neděle v tomto roce |
3 | pondělí | 1-53 | více než 3 dny v tomto roce (v souladu s ISO 8601:1988) |
4 | Neděle | 0–53 | více než 3 dny v tomto roce |
5 | pondělí | 0–53 | pondělí v tomto roce |
6 | Neděle | 1-53 | více než 3 dny v tomto roce |
7 | pondělí | 1-53 | pondělí v tomto roce |
Pokud je vynechán argument mode, hodnota default_week_format
je použita systémová proměnná.
Pojďme zkontrolovat hodnotu mého default_week_format
systémová proměnná:
SELECT @@default_week_format;
Výsledek:
+-----------------------+| @@default_week_format |+-----------------------+| 0 |+-----------------------+
Nyní, když spustím YEARWEEK()
bez určení režimu použije režim 0
.
Příklad
Zde je příklad volání YEARWEEK()
bez určení režimu:
SELECT YEARWEEK('2030-01-01');
Výsledek:
+------------------------+| YEARWEEK('2030-01-01') |+-------------------------+| 202952 |+------------------------+
V tomto případě jsou výsledný rok a týden z předchozího roku.
Určete režim
Zde je příklad určení režimu:
SELECT YEARWEEK('2030-01-01', 1);
Výsledek:
+---------------------------+| YEARWEEK('2030-01-01', 1) |+---------------------------+| 203001 |+---------------------------+
Tentokrát je výsledek jiný.
Pojďme si projít všechny režimy pro stejné datum:
SELECT
YEARWEEK('2030-01-01', 0),
YEARWEEK('2030-01-01', 1),
YEARWEEK('2030-01-01', 2),
YEARWEEK('2030-01-01', 3),
YEARWEEK('2030-01-01', 4),
YEARWEEK('2030-01-01', 5),
YEARWEEK('2030-01-01', 6),
YEARWEEK('2030-01-01', 7);
Výsledek (při použití vertikálního výstupu):
YEARWEEK('2030-01-01', 0):202952YEARWEEK('2030-01-01', 1):203001YEARWEEK('2030-01-01', 2):202952YEARWEEK('1-2030 ', 3):203001YEARWEEK('2030-01-01', 4):203001YEARWEEK('2030-01-01', 5):202953YEARWEEK('2030-01-01', 6):2030-00203 203001 -01', 7):202953
Hodnoty data a času
YEARWEEK()
funkce také pracuje s hodnotami datetime:
SELECT YEARWEEK('2030-08-01 10:30:45');
Výsledek:
+---------------------------------+| YEARWEEK('2030-08-01 10:30:45') |+---------------------------------- +| 203030 |+---------------------------------+
Číselná data
Je také možné předávat data jako číslo, pokud to dává smysl jako datum.
Příklad
SELECT YEARWEEK(20301125);
Výsledek:
+---------------------+| YEARWEEK(20301125) |+--------------------+| 203047 |+--------------------+
Nebo dokonce následující (který používá dvouciferný rok):
SELECT YEARWEEK(301125);
Výsledek:
+-------------------+| YEARWEEK(301125) |+------------------+| 203047 |+------------------+
Ale jako rande to musí dávat smysl. Když zvětším část dne na neplatný den, stane se toto:
SELECT YEARWEEK(20301135);
Výsledek:
+---------------------+| YEARWEEK(20301135) |+--------------------+| NULL |+--------------------+1 řádek v sadě, 1 upozornění (0,000 s)
Vrátil null
s varováním.
Podívejme se na varování:
SHOW WARNINGS;
Výsledek:
+---------+------+----------------------------- ---------+| Úroveň | Kód | Zpráva |+---------+------+------------------------------ --------+| Upozornění | 1292 | Nesprávná hodnota data a času:'20301135' |+---------+------+------------------------- --------------+
Další oddělovače
Pro datum můžete použít jiné oddělovače. MariaDB je docela shovívavá, pokud jde o oddělovače dat. Zde je několik platných příkladů:
SELECT
YEARWEEK('2030/06/25'),
YEARWEEK('2030,06,25'),
YEARWEEK('2030:06:25'),
YEARWEEK('2030;06!25');
Výsledek (při použití vertikálního výstupu):
YEARWEEK('2030/06/25'):203025YEARWEEK('2030,06,25'):203025YEARWEEK('2030:06:25'):203025YEARWEEK('2030;06!25'):203025YEARWEEK('2030:06:25'):před>Aktuální datum
Můžeme předat
NOW()
jako argument datetime pro použití aktuálního data:SELECT NOW(), YEARWEEK(NOW());
Výsledek:
+---------------------+-----------------+| NYNÍ() | ROK TÝDEN(NYNÍ()) |+---------------------+-----------------+| 2021-05-17 09:08:23 | 202120 |+---------------------+-----------------+Neplatné argumenty
Při předání neplatného argumentu
YEARWEEK()
vrátínull
:SELECT YEARWEEK('2030-65-78');
Výsledek:
+------------------------+| YEARWEEK('2030-65-78') |+-------------------------+| NULL |+------------------------+1 řádek v sadě, 1 upozornění (0,000 s)Ukažme varování:
SHOW WARNINGS;
Výsledek:
+---------+------+----------------------------- -----------+| Úroveň | Kód | Zpráva |+---------+------+------------------------------ ----------+| Upozornění | 1292 | Nesprávná hodnota data a času:'2030-65-78' |+---------+------+--------------------- --------------------+Chybí argument
Volání
YEARWEEK()
s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:SELECT YEARWEEK();
Výsledek:
CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'YEARWEEK'A další příklad:
SELECT YEARWEEK('2030-12-10', 1, 2);
Výsledek:
CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'YEARWEEK'