Mysql
 sql >> Datenbank >  >> RDS >> Mysql

YEAR() Beispiele – MySQL

In MySQL YEAR() ist eine eingebaute Datums- und Uhrzeitfunktion, die das Jahr aus einem gegebenen Datumsausdruck zurückgibt.

Es gibt das Jahr als Zahl im Bereich 1000 zurück bis 9999 . Für Nulldaten könnte es 0 zurückgeben oder NULL mit einer Warnung, abhängig von den Werten in Ihrem sql_mode .

Syntax

Die Syntax lautet wie folgt:

YEAR(date) 

Wobei date ist der Datumsausdruck, aus dem das Jahr abgerufen werden soll.

Beispiel

Hier ist ein Beispiel:

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

Ergebnis:

2045

Datum/Uhrzeit-Werte

Es funktioniert auch mit datetime-Werten:

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

Ergebnis:

2045

Nulldaten

Gemäß der MySQL-Dokumentation führen Nulldaten zu 0 . Das tatsächliche Ergebnis hängt jedoch vom Wert Ihres sql_mode ab Systemvariable.

Standardmäßig sind Nulldaten nicht zulässig, und daher ergibt Folgendes NULL mit einer Warnung:

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

Ergebnis:

+--------------------+| JAHR('0000-00-00') |+--------------------+| NULL |+--------------------+1 Zeile im Satz, 1 Warnung (0,00 Sek.)

Und hier ist die Warnung:

show warnings; 

Ergebnis:

+---------+------+------------------------------------- -----------+| Ebene | Code | Nachricht |+---------+------+------------------------------ ----------+| Warnung | 1292 | Falscher datetime-Wert:'0000-00-00' |+---------+------+-------------------- --------------------+

Ich habe diese Warnung erhalten, weil mein sql_mode Systemvariable enthält NO_ZERO_DATE und NO_ZERO_IN_DATE :

SELECT @@SESSION.sql_mode; 

Ergebnis:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Lassen Sie uns meinen sql_mode zurücksetzen ohne diese Werte:

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

Ergebnis:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Lassen Sie uns nun YEAR() ausführen Funktion wieder mit dem Nulldatum:

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

Ergebnis:

0

Dieses Mal erhalten wir 0 , gemäß der Dokumentation.

Beachten Sie, dass NO_ZERO_DATE und NO_ZERO_IN_DATE sind zum Zeitpunkt des Schreibens veraltet. Daher können sie jederzeit entfernt werden.

Numerische Daten

Es ist auch möglich, Datumsangaben als Zahl zu übergeben, sofern es als Datum sinnvoll ist.

Beispiel:

SELECT YEAR(20451210); 

Ergebnis:

2045

Oder sogar das Folgende (das eine zweistellige Jahreszahl verwendet):

SELECT YEAR(451210); 

Ergebnis:

2045

Aber als Date muss es Sinn machen. Folgendes passiert, wenn ich den Tagesteil auf einen ungültigen Tag erhöhe:

SELECT YEAR(20451265); 

Ergebnis:

+----------------+| JAHR(20451265) |+----------------+| NULL |+----------------+1 Zeile im Satz, 1 Warnung (0,00 Sek.)

Wir können die Warnung wie folgt überprüfen:

show warnings; 

Ergebnis:

+---------+------+------------------------------------- ---------+| Ebene | Code | Nachricht |+---------+------+------------------------------ --------+| Warnung | 1292 | Falscher datetime-Wert:'20451265' |+---------+------+----------------------- --------------+

Andere Trennzeichen

Sie können andere Trennzeichen für das Datum verwenden. MySQL ist ziemlich nachsichtig, wenn es um Trennzeichen bei Datumsangaben geht. Hier sind einige gültige Beispiele:

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

Ergebnis (bei vertikaler Ausgabe):

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

Aktuelles Datum

Wir können NOW() übergeben als datetime-Argument, um das aktuelle Datum zu verwenden:

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

Ergebnis:

+---------------------+---------------------+| JETZT() | JAHR(JETZT()) |+---------------------+-------------+| 2021-10-17 11:09:23 | 2021 |+---------------------+---------------------+

Ungültige Argumente

Wenn ein ungültiges Argument übergeben wird, YEAR() gibt null zurück :

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

Ergebnis:

+--------------------+| JAHR('2030-65-78') |+--------------------+| NULL |+--------------------+1 Zeile im Satz, 1 Warnung (0,00 Sek.)

Überprüfen Sie die Warnung:

SHOW WARNINGS; 

Ergebnis:

+---------+------+------------------------------------- -----------+| Ebene | Code | Nachricht |+---------+------+------------------------------ ----------+| Warnung | 1292 | Falscher datetime-Wert:'2030-65-78' |+---------+------+-------------------- --------------------+

Fehlendes Argument

Aufruf von YEAR() mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:

SELECT YEAR(); 

Ergebnis:

ERROR 1064 (42000):Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von ')' in Zeile 1

Und noch ein Beispiel:

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

Ergebnis:

ERROR 1064 (42000):Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von ', '2031-12-10')' in Zeile 1