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