MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona EXTRACT() in MariaDB

In MariaDB, EXTRACT() è una funzione di data e ora incorporata che restituisce l'unità specificata da una data data o un'espressione datetime.

Sintassi

La sintassi è questa:

EXTRACT(unit FROM date)

Dove unit è un'unità di data e ora valida e date è la data da cui estrarre quell'unità.

Esempio

Ecco un esempio che estrae l'anno da una data:

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

Risultato:

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

Eccone un altro che estrae il giorno:

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

Risultato:

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

Valori di data e ora

Funziona anche con i valori datetime:

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

Risultato:

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

Unità di data e ora

Ecco un altro esempio che attraversa ciascuna unità nell'espressione datetime:

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;

Risultato:

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

Unità composite

Ecco un esempio che utilizza un'unità composita. Le unità composite sono costituite da più unità temporali di base.

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

Risultato:

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

Zero unità

Le unità zero danno come risultato 0 .

Esempio:

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;

Risultato:

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

Date numeriche

È anche possibile trasmettere le date come numero, purché abbia senso come data.

Esempio

SELECT EXTRACT(MONTH FROM 20301125);

Risultato:

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

O anche il seguente (che utilizza un anno a due cifre):

SELECT EXTRACT(YEAR FROM 301125);

Risultato:

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

Ma fai attenzione qui:MariaDB fondamentalmente deve indovinare di che anno è. Ecco cosa succede se aumento l'anno da 30 a 80:

SELECT EXTRACT(YEAR FROM 801125);

Risultato:

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

Quindi in questo caso, passando 30 ha portato a 2030 ma passando 80 restituito 1980 .

Inoltre, deve avere senso come data. Ecco cosa succede se utilizzo un giorno non valido:

SELECT EXTRACT(YEAR FROM 20300135);

Risultato:

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

Altri delimitatori

È possibile utilizzare altri delimitatori per la data. MariaDB è abbastanza clemente quando si tratta di delimitatori sulle date. Ecco alcuni validi esempi:

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');

Risultato (usando l'output verticale):

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

Data attuale

Possiamo passare NOW() come argomento data per utilizzare la data corrente:

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

Risultato:

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

Date non valide

Quando viene superata una data non valida, EXTRACT() restituisce null :

SELECT EXTRACT(YEAR FROM 'Friday');

Risultato:

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

Unità di data/ora non valida

Quando viene superata un'unità di data/ora non valida, EXTRACT() restituisce un errore:

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

Risultato:

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

Argomento mancante

Chiamando EXTRACT() senza passare alcun argomento genera un errore:

SELECT EXTRACT();

Risultato:

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