I MySQL kan du bruge EXTRACT()
funktion til at udtrække dele fra en dato. For eksempel kan du udtrække årsdelen, månedsdelen eller dagdelen osv. Du kan også udtrække dele fra tidskomponenten, såsom minutter, sekunder, mikrosekunder osv.
Denne artikel indeholder eksempler til demonstration.
Syntaks
Syntaksen ser sådan ud:
EXTRACT(enhed FRA dato)
Hvor unit
er den datodel, du vil udtrække, og date
er datoværdien at udtrække den del fra.
Se tabellen nederst i denne artikel for en liste over gyldige enhedsspecifikationer.
Eksempel 1
Her er et eksempel for at demonstrere funktionens grundlæggende brug.
VÆLG UDTRAKT(ÅR FRA '2019-01-01') SOM 'Resultat';
Resultat:
+--------+| Resultat |+--------+| 2019 |+--------+
Eksempel 2 – Flere datodele
Her udtrækker jeg de forskellige datodele fra en dato.
INDSTIL @date ='2019-10-03';VÆLG UDDRAG(DAG FRA @dato) SOM 'Dag', UDTRAKT(MÅNED FRA @dato) SOM 'Måned', UDDRAG(ÅR FRA @dato) SOM 'År ';
Resultat:
+------+-------+------+| Dag | Måned | År |+------+-------+------+| 3 | 10 | 2019 |+------+-------+------+
Eksempel 3 – Udpakning af tidsdele
Her udtrækker jeg forskellige tidsdele fra en dato.
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:
+-------+--------+--------+--------------+| Timer | Referat | Sekunder | Mikrosekunder |+-------+---------+--------+-------------+| 12 | 35 | 5 | 123456 |+-------+---------+---------+-------------+
Eksempel 4 – Kombination af enhedsspecifikationer
Du kan også kombinere enhedsspecifikationer som denne:
SET @date ='2019-10-03 12:35:05.123456';SELECT EXTRACT(HOUR_MICROSECOND FROM @date) SOM 'Resultat';
Resultat:
+--------------+| Resultat |+--------------+| 123505123456 |+--------------+
Dette eksempel returnerer alt fra timer-delen til mikrosekunder-delen.
Et databaseeksempel
Her er et eksempel på udtrækning af år og måned fra en kolonne i en database:
BRUG sakila;SELECT payment_date AS 'Date/Time', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Year/Month'FROM paymentWHERE payment_id =1;
Resultat:
+----------------------+--------+| Dato/tid | År/måned |+----------------------+-----------+| 25-05-2005 11:30:37 | 200505 |+---------------------+--------+
Aktuel dato/klokkeslæt
Her udtrækker jeg månedsdelen fra en dato genereret med CURDATE()
funktion.
SELECT CURDATE(), EXTRACT(MONTH FROM CURDATE());
Resultat:
+------------+-------------------------------------+| CURDATE() | UDDRAG(MONTH FROM CURDATE()) |+------+-------------------------------- ----+| 2018-06-26 | 6 |+------------+--------------------------------------+I dette eksempel udtrækker jeg timedelen fra den aktuelle dato og klokkeslæt (som er genereret med
NOW()
funktion).VÆLG NU(), UDTRÆK(TIME FRA NU());Resultat:
+---------------------+------------------------ --+| NU() | UDTAG(TIME FRA NU()) |+--------------------------+------------------------ --------+| 26-06-2018 09:01:46 | 9 |+----------------------+------------------------ -+Forventede værdier
Følgende tabel viser de gyldige enhedsværdier og deres forventede format.
unit Værdi | Forventet expr Formater |
---|---|
MICROSECOND | MIKROSEKUNDER |
ANDEN | SEKUNDER |
MINUT | MINUTTER |
TIME | TIMER |
DAG | DAGE |
UGE | UGER |
MÅNED | MÅNEDER |
KVART | KVARTERE |
ÅR | ÅR |
SECOND_MICROSECOND | 'SECONDS.MICROSECONDS' |
MINUTE_MICROSECOND | 'MINUTTER:SECONDS.MICROSECONDS' |
MINUTE_SECOND | 'MINUTTER:SECONDS' |
HOUR_MICROSECOND | 'TIMER:MINUTTER:SECONDS.MICROSECONDS' |
HOUR_SECOND | 'TIMER:MINUTTER:SECONDS' |
HOUR_MINUTE | 'TIMER:MINUTTER' |
DAY_MICROSECOND | 'DAGE TIMER:MINUTTER:SECONDS.MICROSECONDS' |
DAY_SECOND | 'DAGE TIMER:MINUTTER:SECONDS' |
DAY_MINUTE | 'DAGE TIMER:MINUTTER' |
DAY_HOUR | 'DAGE TIMER' |
YEAR_MONTH | 'ÅR-MÅNEDER' |