In MySQL, puoi usare EXTRACT() funzione per estrarre parti da una data. Ad esempio, puoi estrarre la parte dell'anno, la parte del mese o la parte del giorno, ecc. Puoi anche estrarre parti dalla componente del tempo, come minuti, secondi, microsecondi, ecc.
Questo articolo contiene esempi da dimostrare.
Sintassi
La sintassi è questa:
EXTRACT(unit FROM date)
Dove unit è la parte della data che vuoi estrarre e date è il valore della data da cui estrarre quella parte.
Consulta la tabella in fondo a questo articolo per un elenco di identificatori di unità validi.
Esempio 1
Ecco un esempio per dimostrare l'utilizzo di base della funzione.
SELECT EXTRACT(YEAR FROM '2019-01-01') AS 'Result';
Risultato:
+--------+ | Result | +--------+ | 2019 | +--------+
Esempio 2:più parti della data
Qui estraggo le varie parti di data da una data.
SET @date = '2019-10-03';
SELECT
EXTRACT(DAY FROM @date) AS 'Day',
EXTRACT(MONTH FROM @date) AS 'Month',
EXTRACT(YEAR FROM @date) AS 'Year';
Risultato:
+------+-------+------+ | Day | Month | Year | +------+-------+------+ | 3 | 10 | 2019 | +------+-------+------+
Esempio 3:estrazione di parti temporali
Qui estraggo varie parti di tempo da una data.
SET @date = '2019-10-03 12:35:05.123456';
SELECT
EXTRACT(HOUR FROM @date) AS 'Hours',
EXTRACT(MINUTE FROM @date) AS 'Minutes',
EXTRACT(SECOND FROM @date) AS 'Seconds',
EXTRACT(MICROSECOND FROM @date) AS 'Microseconds';
Risultato:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 12 | 35 | 5 | 123456 | +-------+---------+---------+--------------+
Esempio 4 – Combinazione di specificatori di unità
Puoi anche combinare gli identificatori di unità, in questo modo:
SET @date = '2019-10-03 12:35:05.123456';
SELECT
EXTRACT(HOUR_MICROSECOND FROM @date) AS 'Result';
Risultato:
+--------------+ | Result | +--------------+ | 123505123456 | +--------------+
Questo esempio restituisce tutto, dalla parte delle ore alla parte dei microsecondi.
Un esempio di database
Ecco un esempio di estrazione dell'anno e del mese da una colonna in un database:
USE sakila; SELECT payment_date AS 'Date/Time', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Year/Month' FROM payment WHERE payment_id = 1;
Risultato:
+---------------------+------------+ | Date/Time | Year/Month | +---------------------+------------+ | 2005-05-25 11:30:37 | 200505 | +---------------------+------------+
Data/ora corrente
Qui, estraggo la parte del mese da una data generata con CURDATE() funzione.
SELECT
CURDATE(),
EXTRACT(MONTH FROM CURDATE());
Risultato:
+------------+-------------------------------+ | CURDATE() | EXTRACT(MONTH FROM CURDATE()) | +------------+-------------------------------+ | 2018-06-26 | 6 | +------------+-------------------------------+
In questo esempio estraggo la parte dell'ora dalla data e ora correnti (che viene generata con NOW() funzione).
SELECT
NOW(),
EXTRACT(HOUR FROM NOW());
Risultato:
+---------------------+--------------------------+ | NOW() | EXTRACT(HOUR FROM NOW()) | +---------------------+--------------------------+ | 2018-06-26 09:01:46 | 9 | +---------------------+--------------------------+
Valori previsti
La tabella seguente mostra i valori unitari validi e il loro formato previsto.
unit Valore | Previsto expr Formato |
|---|---|
| MICROSECONDO | MICROSECONDI |
| SECONDA | SECONDI |
| MINUTO | MINUTI |
| ORA | ORE |
| GIORNO | GIORNI |
| SETTIMANA | SETTIMANE |
| MESE | MESI |
| TRIMESTRE | TRIMESTRE |
| ANNO | ANNI |
| SECOND_MICROSECONDO | 'SECONDI.MICROSECONDI' |
| MINUTE_MICROSECOND | 'MINUTI:SECONDI.MICROSECONDI' |
| MINUTE_SECOND | 'MINUTI:SECONDI' |
| ORA_MICROSECOND | 'ORE:MINUTI:SECONDI.MICROSECONDI' |
| ORA_SECONDA | 'ORE:MINUTI:SECONDI' |
| ORA_MINUTO | 'ORE:MINUTI' |
| DAY_MICROSECONDO | 'GIORNI ORE:MINUTI:SECONDI.MICROSECONDI' |
| DAY_SECOND | 'GIORNI ORE:MINUTI:SECONDI' |
| DAY_MINUTE | 'GIORNI ORE:MINUTI' |
| DAY_HOUR | 'ORE DEI GIORNI' |
| ANNO_MESE | 'ANNI-MESI' |