MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie EXTRACT() in MariaDB funktioniert

In MariaDB EXTRACT() ist eine integrierte Datums- und Zeitfunktion, die die angegebene Einheit aus einem bestimmten Datums- oder Datumszeitausdruck zurückgibt.

Syntax

Die Syntax lautet wie folgt:

EXTRACT(unit FROM date)

Wobei unit ist eine gültige Datums- und Zeiteinheit und date ist das Datum, aus dem diese Einheit extrahiert werden soll.

Beispiel

Hier ist ein Beispiel, das das Jahr aus einem Datum extrahiert:

SELECT EXTRACT(YEAR FROM '2030-12-25');

Ergebnis:

+---------------------------------+
| EXTRACT(YEAR FROM '2030-12-25') |
+---------------------------------+
|                            2030 |
+---------------------------------+

Hier ist eine weitere, die den Tag extrahiert:

SELECT EXTRACT(DAY FROM '2030-12-25');

Ergebnis:

+--------------------------------+
| EXTRACT(DAY FROM '2030-12-25') |
+--------------------------------+
|                             25 |
+--------------------------------+

Datum/Uhrzeit-Werte

Es funktioniert auch mit datetime-Werten:

SELECT EXTRACT(HOUR FROM '2030-02-01 10:30:45');

Ergebnis:

+------------------------------------------+
| EXTRACT(HOUR FROM '2030-02-01 10:30:45') |
+------------------------------------------+
|                                       10 |
+------------------------------------------+

Datums- und Zeiteinheiten

Hier ist ein weiteres Beispiel, das jede Einheit im datetime-Ausdruck durchläuft:

SELECT 
    EXTRACT(YEAR FROM '2030-02-01 10:30:45.123456') AS YEAR,
    EXTRACT(MONTH FROM '2030-02-01 10:30:45.123456') AS MONTH,
    EXTRACT(DAY FROM '2030-02-01 10:30:45.123456') AS DAY,
    EXTRACT(HOUR FROM '2030-02-01 10:30:45.123456') AS HOUR,
    EXTRACT(MINUTE FROM '2030-02-01 10:30:45.123456') AS MINUTE,
    EXTRACT(SECOND FROM '2030-02-01 10:30:45.123456') AS SECOND,
    EXTRACT(MICROSECOND FROM '2030-02-01 10:30:45.123456') AS MICROSECOND;

Ergebnis:

+------+-------+------+------+--------+--------+-------------+
| YEAR | MONTH | DAY  | HOUR | MINUTE | SECOND | MICROSECOND |
+------+-------+------+------+--------+--------+-------------+
| 2030 |     2 |    1 |   10 |     30 |     45 |      123456 |
+------+-------+------+------+--------+--------+-------------+

Zusammengesetzte Einheiten

Hier ist ein Beispiel, das eine zusammengesetzte Einheit verwendet. Zusammengesetzte Einheiten bestehen aus mehreren Basiszeiteinheiten.

SELECT EXTRACT(YEAR_MONTH FROM '2030-02-01');

Ergebnis:

+---------------------------------------+
| EXTRACT(YEAR_MONTH FROM '2030-02-01') |
+---------------------------------------+
|                                203002 |
+---------------------------------------+

Null Einheiten

Nulleinheiten ergeben 0 .

Beispiel:

SELECT 
    EXTRACT(YEAR FROM '0000-00-00 00:00:00.000000') AS YEAR,
    EXTRACT(MONTH FROM '0000-00-00 00:00:00.000000') AS MONTH,
    EXTRACT(DAY FROM '0000-00-00 00:00:00.000000') AS DAY,
    EXTRACT(HOUR FROM '0000-00-00 00:00:00.000000') AS HOUR,
    EXTRACT(MINUTE FROM '0000-00-00 00:00:00.000000') AS MINUTE,
    EXTRACT(SECOND FROM '0000-00-00 00:00:00.000000') AS SECOND,
    EXTRACT(MICROSECOND FROM '0000-00-00 00:00:00.000000') AS MICROSECOND;

Ergebnis:

+------+-------+------+------+--------+--------+-------------+
| YEAR | MONTH | DAY  | HOUR | MINUTE | SECOND | MICROSECOND |
+------+-------+------+------+--------+--------+-------------+
|    0 |     0 |    0 |    0 |      0 |      0 |           0 |
+------+-------+------+------+--------+--------+-------------+

Numerische Daten

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

Beispiel

SELECT EXTRACT(MONTH FROM 20301125);

Ergebnis:

+------------------------------+
| EXTRACT(MONTH FROM 20301125) |
+------------------------------+
|                           11 |
+------------------------------+

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

SELECT EXTRACT(YEAR FROM 301125);

Ergebnis:

+---------------------------+
| EXTRACT(YEAR FROM 301125) |
+---------------------------+
|                      2030 |
+---------------------------+

Aber Vorsicht hier – MariaDB muss grundsätzlich erraten, um welches Jahr es sich handelt. Folgendes passiert, wenn ich das Jahr von 30 auf 80 erhöhe:

SELECT EXTRACT(YEAR FROM 801125);

Ergebnis:

+---------------------------+
| EXTRACT(YEAR FROM 801125) |
+---------------------------+
|                      1980 |
+---------------------------+

In diesem Fall wird also 30 übergeben führte zu 2030 aber 80 übergeben gab 1980 zurück .

Außerdem muss es als Datum sinnvoll sein. Folgendes passiert, wenn ich einen ungültigen Tag verwende:

SELECT EXTRACT(YEAR FROM 20300135);

Ergebnis:

+-----------------------------+
| EXTRACT(YEAR FROM 20300135) |
+-----------------------------+
|                        NULL |
+-----------------------------+

Andere Trennzeichen

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

SELECT 
    EXTRACT(MONTH FROM '2030/06/25'),
    EXTRACT(MONTH FROM '2030,06,25'),
    EXTRACT(MONTH FROM '2030:06:25'),
    EXTRACT(MONTH FROM '2030;06!25');

Ergebnis (bei vertikaler Ausgabe):

EXTRACT(MONTH FROM '2030/06/25'): 6
EXTRACT(MONTH FROM '2030,06,25'): 6
EXTRACT(MONTH FROM '2030:06:25'): 6
EXTRACT(MONTH FROM '2030;06!25'): 6

Aktuelles Datum

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

SELECT 
    NOW(),
    EXTRACT(MONTH FROM NOW());

Ergebnis:

+---------------------+---------------------------+
| NOW()               | EXTRACT(MONTH FROM NOW()) |
+---------------------+---------------------------+
| 2021-05-16 10:06:21 |                         5 |
+---------------------+---------------------------+

Ungültige Daten

Wenn ein ungültiges Datum übergeben wird, EXTRACT() gibt null zurück :

SELECT EXTRACT(YEAR FROM 'Friday');

Ergebnis:

+-----------------------------+
| EXTRACT(YEAR FROM 'Friday') |
+-----------------------------+
|                        NULL |
+-----------------------------+

Ungültige Datums-/Zeiteinheit

Wenn eine ungültige Datums-/Zeiteinheit übergeben wird, EXTRACT() gibt einen Fehler zurück:

SELECT EXTRACT(DECADE FROM '2030-06-25');

Ergebnis:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DECADE FROM '2030-06-25')' at line 1

Fehlendes Argument

Aufruf von EXTRACT() ohne Argumente zu übergeben führt zu einem Fehler:

SELECT EXTRACT();

Ergebnis:

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