sql >> Databasteknik >  >> RDS >> Mysql

YEAR() Exempel – MySQL

I MySQL, YEAR() är en inbyggd datum- och tidsfunktion som returnerar året från ett givet datumuttryck.

Den returnerar året som ett tal i intervallet 1000 till 9999 . För noll datum kan den returnera 0 eller NULL med en varning, beroende på värdena i ditt sql_mode .

Syntax

Syntaxen ser ut så här:

YEAR(date) 

Där date är datumuttrycket att hämta årtalet från.

Exempel

Här är ett exempel:

SELECT YEAR('2045-12-10'); 

Resultat:

2045

Datetime-värden

Det fungerar också med datetime-värden:

SELECT YEAR('2045-12-10 18:52:17'); 

Resultat:

2045

Noll datum

Enligt MySQL-dokumentationen resulterar noll datum i 0 . Det faktiska resultatet kommer dock att bero på värdet på ditt sql_mode systemvariabel.

Som standard är noll datum inte tillåtna, och därför producerar följande NULL med en varning:

SELECT YEAR('0000-00-00'); 

Resultat:

+----------------------------+| ÅR('0000-00-00') |+------------------------+| NULL |+--------------------+1 rad i set, 1 varning (0,00 sek)

Och här är varningen:

show warnings; 

Resultat:

+--------+------+------------------------------------ -----------+| Nivå | Kod | Meddelande |+--------+------+-------------------------------------- ----------+| Varning | 1292 | Felaktigt datetime-värde:'0000-00-00' |+---------+------+--------------------- --------------------+

Jag fick den här varningen eftersom mitt sql_mode systemvariabeln inkluderar NO_ZERO_DATE och NO_ZERO_IN_DATE :

SELECT @@SESSION.sql_mode; 

Resultat:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Låt oss återställa mitt sql_mode utan dessa värden:

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SELECT @@SESSION.sql_mode; 

Resultat:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Låt oss nu köra YEAR() funktion igen med nolldatum:

SELECT YEAR('0000-00-00'); 

Resultat:

0

Den här gången får vi 0 , enligt dokumentationen.

Observera att NO_ZERO_DATE och NO_ZERO_IN_DATE är utfasade i skrivande stund. Därför kan de tas bort när som helst.

Numeriska datum

Det är också möjligt att skicka datum som ett nummer, så länge det är vettigt som ett datum.

Exempel:

SELECT YEAR(20451210); 

Resultat:

2045

Eller till och med följande (som använder ett tvåsiffrigt år):

SELECT YEAR(451210); 

Resultat:

2045

Men det måste vara vettigt som en dejt. Så här händer om jag ökar dagdelen till en ogiltig dag:

SELECT YEAR(20451265); 

Resultat:

+----------------+| ÅR(20451265) |+----------------+| NULL |+----------------+1 rad i set, 1 varning (0,00 sek)

Vi kan kontrollera varningen så här:

show warnings; 

Resultat:

+--------+------+------------------------------------ ----------+| Nivå | Kod | Meddelande |+--------+------+-------------------------------------- --------+| Varning | 1292 | Felaktigt datetime-värde:'20451265' |+--------+------+------------------------ --------------+

Andra avgränsare

Du kan använda andra avgränsare för datumet. MySQL är ganska förlåtande när det kommer till avgränsare på datum. Här är några giltiga exempel:

SELECT 
    YEAR('2045/12/10'),
    YEAR('2045,12,10'),
    YEAR('2045:12:10'),
    YEAR('2045;12!10'); 

Resultat (med vertikal utdata):

YEAR('2045/12/10'):2045YEAR('2045,12,10'):2045YEAR('2045:12:10'):2045YEAR('2045;12!10'):2045 

Aktuellt datum

Vi kan skicka NOW() som datetime-argument för att använda det aktuella datumet:

SELECT 
    NOW(),
    YEAR(NOW()); 

Resultat:

+----------------------------+-------------+| NU() | ÅR(NU()) |+----------------------------+------------+| 2021-10-17 11:09:23 | 2021 |+---------------------+-------------+

Ogiltiga argument

När ett ogiltigt argument skickades, YEAR() returnerar null :

SELECT YEAR('2030-65-78'); 

Resultat:

+----------------------------+| ÅR('2030-65-78') |+------------------------+| NULL |+--------------------+1 rad i set, 1 varning (0,00 sek)

Kontrollera varningen:

SHOW WARNINGS; 

Resultat:

+--------+------+------------------------------------ -----------+| Nivå | Kod | Meddelande |+--------+------+-------------------------------------- ----------+| Varning | 1292 | Felaktigt datetime-värde:'2030-65-78' |+---------+------+-------------------- --------------------+

Argument saknas

Anropar YEAR() med fel antal argument, eller utan att skicka några argument, resulterar i ett fel:

SELECT YEAR(); 

Resultat:

ERROR 1064 (42000):Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MySQL-serverversion för rätt syntax att använda nära ')' på rad 1

Och ett annat exempel:

SELECT YEAR('2030-12-10', '2031-12-10'); 

Resultat:

ERROR 1064 (42000):Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MySQL-serverversion för rätt syntax att använda nära ', '2031-12-10')' på rad 1

  1. UTC_TIMESTAMP() Exempel – MySQL

  2. Lägg till ny RAC-instans manuellt

  3. ORACLE Efter uppdateringstrigger:löser ORA-04091 mutationstabellfel

  4. Hur man tar bort en rad i SQL