V MySQL YEAR()
je vestavěná funkce data a času, která vrací rok z daného výrazu data.
Vrátí rok jako číslo v rozsahu 1000
na 9999
. Pro nulová data může vrátit 0
nebo NULL
s varováním v závislosti na hodnotách ve vašem sql_mode
.
Syntaxe
Syntaxe vypadá takto:
YEAR(date)
Kde date
je výraz data, ze kterého se získá rok.
Příklad
Zde je příklad:
SELECT YEAR('2045-12-10');
Výsledek:
2045
Hodnoty data a času
Funguje také s hodnotami datetime:
SELECT YEAR('2045-12-10 18:52:17');
Výsledek:
2045
Nula dat
Podle dokumentace MySQL má nulová data za následek 0
. Skutečný výsledek však bude záviset na hodnotě vašeho sql_mode
systémová proměnná.
Ve výchozím nastavení nejsou povolena nulová data, a proto následující postup vytvoří NULL
s varováním:
SELECT YEAR('0000-00-00');
Výsledek:
+---------------------+| ROK('0000-00-00') |+--------------------+| NULL |+--------------------+1 řádek v sadě, 1 upozornění (0,00 s)
A tady je varování:
show warnings;
Výsledek:
+---------+------+----------------------------- -----------+| Úroveň | Kód | Zpráva |+---------+------+------------------------------ ----------+| Upozornění | 1292 | Nesprávná hodnota data a času:'0000-00-00' |+---------+------+--------------------- --------------------+
Dostal jsem toto varování, protože můj sql_mode
systémová proměnná obsahuje NO_ZERO_DATE
a NO_ZERO_IN_DATE
:
SELECT @@SESSION.sql_mode;
Výsledek:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Pojďme resetovat můj sql_mode
bez těchto hodnot:
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SELECT @@SESSION.sql_mode;
Výsledek:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Nyní spustíme YEAR()
funkce znovu s nulovým datem:
SELECT YEAR('0000-00-00');
Výsledek:
0
Tentokrát dostaneme 0
, podle dokumentace.
Všimněte si, že NO_ZERO_DATE
a NO_ZERO_IN_DATE
jsou v době psaní tohoto článku zastaralé. Proto mohou být kdykoli odstraněny.
Číselná data
Je také možné předávat data jako číslo, pokud to dává smysl jako datum.
Příklad:
SELECT YEAR(20451210);
Výsledek:
2045
Nebo dokonce následující (který používá dvouciferný rok):
SELECT YEAR(451210);
Výsledek:
2045
Ale jako rande to musí dávat smysl. Když zvětším část dne na neplatný den, stane se toto:
SELECT YEAR(20451265);
Výsledek:
+-----------------+| ROK(20451265) |+----------------+| NULL |+----------------+1 řádek v sadě, 1 upozornění (0,00 s)
Varování můžeme zkontrolovat takto:
show warnings;
Výsledek:
+---------+------+----------------------------- ---------+| Úroveň | Kód | Zpráva |+---------+------+------------------------------ --------+| Upozornění | 1292 | Nesprávná hodnota data a času:'20451265' |+---------+------+------------------------- --------------+
Další oddělovače
Pro datum můžete použít jiné oddělovače. MySQL je docela shovívavá, pokud jde o oddělovače dat. Zde je několik platných příkladů:
SELECT
YEAR('2045/12/10'),
YEAR('2045,12,10'),
YEAR('2045:12:10'),
YEAR('2045;12!10');
Výsledek (při použití vertikálního výstupu):
YEAR('2045/12/10'):2045YEAR('2045,12,10'):2045YEAR('2045:12:10'):2045YEAR('2045;12!10'):2045Aktuální datum
Můžeme předat
NOW()
jako argument datetime pro použití aktuálního data:SELECT NOW(), YEAR(NOW());
Výsledek:
+---------------------+-------------+| NYNÍ() | ROK(NYNÍ()) |+---------------------+-------------+| 2021-10-17 11:09:23 | 2021 |+---------------------+-------------+Neplatné argumenty
Při předání neplatného argumentu
YEAR()
vrátínull
:SELECT YEAR('2030-65-78');
Výsledek:
+---------------------+| ROK('2030-65-78') |+--------------------+| NULL |+--------------------+1 řádek v sadě, 1 upozornění (0,00 s)Zkontrolujte 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í
YEAR()
s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:SELECT YEAR();
Výsledek:
ERROR 1064 (42000):Máte chybu v syntaxi SQL; podívejte se do manuálu, který odpovídá verzi vašeho serveru MySQL, kde najdete správnou syntaxi blízko ')' na řádku 1A další příklad:
SELECT YEAR('2030-12-10', '2031-12-10');
Výsledek:
ERROR 1064 (42000):Máte chybu v syntaxi SQL; podívejte se do manuálu, který odpovídá verzi vašeho serveru MySQL, kde najdete správnou syntaxi poblíž ', '2031-12-10')' na řádku 1