sql >> Databáze >  >> RDS >> Mysql

YEAR() Příklady – MySQL

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'):2045 

Aktuá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 1

A 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

  1. MySQL vs PostgreSQL? Které si mám vybrat pro svůj projekt Django?

  2. Proč jsou v hodnotách sloupce IDENTITY mezery?

  3. Co je sdílení databáze?

  4. Jak mohu optimalizovat funkci ORDER BY RAND() MySQL?