I MySQL kan du använda EXTRACT()
funktion för att extrahera delar från ett datum. Du kan till exempel extrahera årsdelen, månadsdelen eller dagdelen etc. Du kan också extrahera delar från tidskomponenten, såsom minuter, sekunder, mikrosekunder osv.
Den här artikeln innehåller exempel att visa.
Syntax
Syntaxen ser ut så här:
EXTRACT(enhet FRÅN datum)
Där unit
är datumdelen som du vill extrahera, och date
är datumvärdet att extrahera den delen från.
Se tabellen längst ned i den här artikeln för en lista över giltiga enhetsspecifikationer.
Exempel 1
Här är ett exempel för att visa funktionens grundläggande användning.
VÄLJ EXTRAKT(ÅR FRÅN '2019-01-01') SOM 'Resultat';
Resultat:
+--------+| Resultat |+--------+| 2019 |+--------+
Exempel 2 – Fler datumdelar
Här extraherar jag de olika datumdelarna från ett datum.
SET @date ='2019-10-03';VÄLJ EXTRACT(DAY FROM @date) AS 'Day', EXTRACT(MONTH FROM @date) AS 'Month', EXTRACT(YEAR FROM @date) AS 'Year ';
Resultat:
+------+-------+------+| Dag | Månad | År |+------+-------+------+| 3 | 10 | 2019 |+------+-------+------+
Exempel 3 – Extrahera tidsdelar
Här extraherar jag olika tidsdelar från ett datum.
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';
Resultat:
+-------+--------+---------+--------------+| Timmar | Protokoll | Sekunder | Mikrosekunder |+-------+---------+--------+--------------+| 12 | 35 | 5 | 123456 |+-------+---------+---------+-------------+
Exempel 4 – Kombinera enhetsspecifikationer
Du kan också kombinera enhetsspecifikationer, så här:
SET @date ='2019-10-03 12:35:05.123456';SELECT EXTRACT(HOUR_MICROSECOND FROM @date) SOM 'Result';
Resultat:
+--------------+| Resultat |+--------------+| 123505123456 |+--------------+
Detta exempel returnerar allt från timmar-delen till mikrosekundersdelen.
Ett databasexempel
Här är ett exempel på att extrahera år och månad från en kolumn i en databas:
ANVÄND sakila;SELECT payment_date AS 'Date/Time', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Year/Month'FROM paymentWHERE payment_id =1;
Resultat:
+----------------------------+--------+| Datum/Tid | År/månad |+----------------------+------------+| 2005-05-25 11:30:37 | 200505 |+----------------------+------------+
Aktuellt datum/tid
Här extraherar jag månadsdelen från ett datum som genererats med CURDATE()
funktion.
SELECT CURDATE(), EXTRACT(MONTH FROM CURDATE());
Resultat:
+------------+-------------------------------------+| CURDATE() | EXTRACTER(MONTH FROM CURDATE()) |+------+-------------------------------- ----+| 2018-06-26 | 6 |+------------+--------------------------------------+I det här exemplet extraherar jag timdelen från det aktuella datumet och tiden (som genereras med
NOW()
funktion).VÄLJ NU(), EXTRACERA(TIMMAR FRÅN NU());Resultat:
+---------------------+------------------------ --+| NU() | EXTRACERA(HOUR FROM NOW()) |+--------------------------+------------------------ --------+| 2018-06-26 09:01:46 | 9 |+---------------------+------------------------ -+Förväntade värden
Följande tabell visar giltiga enhetsvärden och deras förväntade format.
unit Värde | Förväntat expr Format |
---|---|
MICROSECOND | MIKROSECONDS |
ANDRA | sekunder |
MINUT | MINUTTER |
TIMMAR | TIMMAR |
DAG | DAGAR |
VECKAN | VECKOR |
MÅNAD | MÅNADER |
KVARTAL | KVARTER |
ÅR | ÅR |
SECOND_MICROSECOND | ‘SECONDS.MICROSECONDS’ |
MINUTE_MICROSECOND | ‘MINUTES:SECONDS.MICROSECONDS’ |
MINUTE_SECOND | 'MINUTTER:SECONDS' |
HOUR_MICROSECOND | 'TIMMAR:MINUTTER:SECONDS.MICROSECONDS' |
HOUR_SECOND | 'TIMMAR:MINUTTER:SEKUNDER' |
HOUR_MINUTE | 'TIMMAR:MINUTTER' |
DAY_MICROSECOND | ‘DAGAR TIMMER:MINUTTER:SECONDS.MICROSECONDS’ |
DAY_SECOND | ‘DAGAR TIMMAR:MINUTTER:SECONDS’ |
DAY_MINUTE | ‘DAGAR TIMMAR:MINUTTER’ |
DAY_HOUR | 'DAGAR TIMMER' |
YEAR_MONTH | 'ÅR-MÅNADER' |