sql >> Database >  >> RDS >> Mysql

YEAR() Voorbeelden – MySQL

In MySQL, YEAR() is een ingebouwde datum- en tijdfunctie die het jaar retourneert uit een bepaalde datumuitdrukking.

Het geeft het jaar terug als een getal in het bereik 1000 tot 9999 . Voor nuldatums kan het 0 . retourneren of NULL met een waarschuwing, afhankelijk van de waarden in uw sql_mode .

Syntaxis

De syntaxis gaat als volgt:

YEAR(date)

Waar date is de datumuitdrukking om het jaar uit te halen.

Voorbeeld

Hier is een voorbeeld:

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

Resultaat:

2045

Datum/tijd-waarden

Het werkt ook met datetime-waarden:

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

Resultaat:

2045

Nul datums

Volgens de MySQL-documentatie resulteren nuldatums in 0 . Het werkelijke resultaat hangt echter af van de waarde van uw sql_mode systeem variabele.

Standaard zijn nuldatums niet toegestaan, en daarom produceert het volgende NULL met een waarschuwing:

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

Resultaat:

+--------------------+
| YEAR('0000-00-00') |
+--------------------+
|               NULL |
+--------------------+
1 row in set, 1 warning (0.00 sec)

En hier is de waarschuwing:

show warnings;

Resultaat:

+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '0000-00-00' |
+---------+------+----------------------------------------+

Ik kreeg deze waarschuwing omdat mijn sql_mode systeemvariabele bevat NO_ZERO_DATE en NO_ZERO_IN_DATE :

SELECT @@SESSION.sql_mode;

Resultaat:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Laten we mijn sql_mode resetten zonder die waarden:

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

Resultaat:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Laten we nu de YEAR() . uitvoeren functie opnieuw met de nuldatum:

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

Resultaat:

0

Deze keer krijgen we 0 , volgens de documentatie.

Merk op dat NO_ZERO_DATE en NO_ZERO_IN_DATE zijn op het moment van schrijven afgekeurd. Daarom kunnen ze op elk moment worden verwijderd.

Numerieke datums

Het is ook mogelijk om datums als een getal door te geven, zolang het maar logisch is als een datum.

Voorbeeld:

SELECT YEAR(20451210);

Resultaat:

2045

Of zelfs het volgende (met een jaartal van twee cijfers):

SELECT YEAR(451210);

Resultaat:

2045

Maar het moet logisch zijn als een date. Dit gebeurt er als ik het daggedeelte verhoog naar een ongeldige dag:

SELECT YEAR(20451265);

Resultaat:

+----------------+
| YEAR(20451265) |
+----------------+
|           NULL |
+----------------+
1 row in set, 1 warning (0.00 sec)

We kunnen de waarschuwing als volgt controleren:

show warnings;

Resultaat:

+---------+------+--------------------------------------+
| Level   | Code | Message                              |
+---------+------+--------------------------------------+
| Warning | 1292 | Incorrect datetime value: '20451265' |
+---------+------+--------------------------------------+

Andere scheidingstekens

U kunt andere scheidingstekens voor de datum gebruiken. MySQL is vrij vergevingsgezind als het gaat om scheidingstekens op datums. Hier zijn enkele geldige voorbeelden:

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

Resultaat (met verticale uitvoer):

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

Huidige datum

We kunnen NOW() doorgeven als het datetime-argument om de huidige datum te gebruiken:

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

Resultaat:

+---------------------+-------------+
| NOW()               | YEAR(NOW()) |
+---------------------+-------------+
| 2021-10-17 11:09:23 |        2021 |
+---------------------+-------------+

Ongeldige argumenten

Wanneer een ongeldig argument wordt doorgegeven, YEAR() retourneert null :

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

Resultaat:

+--------------------+
| YEAR('2030-65-78') |
+--------------------+
|               NULL |
+--------------------+
1 row in set, 1 warning (0.00 sec)

Controleer de waarschuwing:

SHOW WARNINGS;

Resultaat:

+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '2030-65-78' |
+---------+------+----------------------------------------+

Ontbrekend argument

Bellen YEAR() met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten, resulteert in een fout:

SELECT YEAR();

Resultaat:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

En nog een voorbeeld:

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

Resultaat:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ', '2031-12-10')' at line 1

  1. Hoe Array/Table Parameter te gebruiken voor Oracle (ODP.NET 10g) via ADO.NET/C#?

  2. Hoe maak je een alleen-lezen gebruiker aan in PostgreSQL?

  3. PostgreSQL-kolom foo bestaat niet waar foo de waarde is

  4. Methoden om rijen in SQL Server te rangschikken:ROW_NUMBER(), RANK(), DENSE_RANK() en NTILE()