I MariaDB, EXTRACT()
er en indbygget dato- og klokkeslætsfunktion, der returnerer den angivne enhed fra et givet dato- eller datotidsudtryk.
Syntaks
Syntaksen ser sådan ud:
EXTRACT(enhed FRA dato)
Hvor enhed
er en gyldig dato- og tidsenhed og dato
er datoen for at udtrække denne enhed fra.
Eksempel
Her er et eksempel, der udtrækker året fra en dato:
VÆLG UDTRAKT(ÅR FRA '2030-12-25');
Resultat:
+--------------------------------+| UDDRAG(ÅR FRA '2030-12-25') |+----------------------------------------+| 2030 |+----------------------------------------+
Her er endnu en, der uddrager dagen:
VÆLG UDTRAKT(DAG FRA '2030-12-25');
Resultat:
+--------------------------------+| UDDRAG(DAG FRA '2030-12-25') |+--------------------------------+| 25 |+--------------------------------+
Dato-tidsværdier
Det fungerer også med datetime-værdier:
VÆLG UDDRAG(TIME FRA '2030-02-01 10:30:45');
Resultat:
+--------------------------------------------------+| UDDRAG(TIME FRA '2030-02-01 10:30:45') |+---------------------------------------- -----------+| 10 |+---------------------------------------------------+
Dato- og tidsenheder
Her er et andet eksempel, der løber gennem hver enhed i datetime-udtrykket:
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(DAY) FRA '2030-02-01 10:30:45.123456') SOM DAG, UDDRAG(TIME FRA '2030-02-01 10:30:45.123456') SOM TIME, UDDRAG(MINUT FRA '2030-02-3010 :45.123456') AS MINUTE, EXTRACT(SECOND FROM '2030-02-01 10:30:45.123456') SECOND, EXTRACT(MICROSECOND FROM '2030-02-01 10:30:45OS.123code MICROSECOND')AS>
Resultat:
+------+-------+------+------+--------+-------- +-------------+| ÅR | MÅNED | DAG | TIME | MINUTE | ANDEN | MICROSECOND |+------+-------+------+------+--------+--------+ --------------+| 2030 | 2 | 1 | 10 | 30 | 45 | 123456 |+------+-------+------+------+--------+--------+ -------------+
Sammensatte enheder
Her er et eksempel, der bruger en sammensat enhed. Sammensatte enheder består af flere basistidsenheder.
SELECT EXTRACT(YEAR_MONTH FROM '2030-02-01');
Resultat:
+----------------------------------------------+| UDDRAG(YEAR_MONTH FROM '2030-02-01') |+------------------------------------------------ ---+| 203002 |+----------------------------------------------+
Nul enheder
Nul enheder resulterer i 0
.
Eksempel:
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) FRA '0000-00-00 00:00:00.000000') SOM DAG, UDTRÆK(TIME FRA '0000-00-00 00:00:00.000000') SOM TIME, UDDRAG(MINUT FRA '0000-00-00-00') :00.000000') SOM MINUT, UDTRÆK(SEKUND FRA '0000-00-00 00:00:00.000000') SOM ANDET, UDDRAG(MIKREKUND FRA '0000-00-00 00:00:00-00 00:00:00'0)kode AS>
Resultat:
+------+-------+------+------+--------+-------- +-------------+| ÅR | MÅNED | DAG | TIME | MINUTE | ANDEN | MICROSECOND |+------+-------+------+------+--------+--------+ --------------+| 0 | 0 | 0 | 0 | 0 | 0 | 0 |+------+-------+------+------+--------+--------+ -------------+
Numeriske datoer
Det er også muligt at videregive datoer som et tal, så længe det giver mening som en dato.
Eksempel
VÆLG EKSTRAK(MONTH FROM 20301125);
Resultat:
+--------------------------------------+| UDDRAG(MÅNED FRA 20301125) |+------------------------------------+| 11 |+-------------------------------------+
Eller endda følgende (som bruger et tocifret årstal):
VÆLG UDTRAKT(ÅR FRA 301125);
Resultat:
+--------------------------------+| UDDRAG(ÅR FRA 301125) |+--------------------------------+| 2030 |+----------------------------+
Men vær forsigtig her – MariaDB skal som udgangspunkt gætte hvilket år det er. Her er hvad der sker, hvis jeg øger året fra 30 til 80:
VÆLG UDDRAG(ÅR FRA 801125);
Resultat:
+--------------------------------+| UDDRAG(ÅR FRA 801125) |+--------------------------------+| 1980 |+-----------------------------------+
Så i dette tilfælde sender du 30
resulterede i 2030
men passerer 80
returnerede 1980
.
Det skal også give mening som en date. Her er, hvad der sker, hvis jeg bruger en ugyldig dag:
VÆLG UDTRAKT(ÅR FRA 20300135);
Resultat:
+-------------------------------------+| UDDRAG(ÅR FRA 20300135) |+-----------------------------------+| NULL |+-------------------------------------+
Andre afgrænsninger
Du kan bruge andre skilletegn for datoen. MariaDB er ret tilgivende, når det kommer til afgrænsninger på datoer. Her er nogle gyldige eksempler:
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');
Resultat (ved hjælp af lodret output):
EXTRACT(MONTH FROM '2030/06/25'):6EXTRACT(MONTH FROM '2030,06,25'):6EXTRACT(MONTH FROM '2030:06:25'):6EXTRACT(MONTH FROM '2030;06 !25'):6
Aktuel dato
Vi kan sende NOW()
som dato-argument for at bruge den aktuelle dato:
VÆLG NU(), EXTRACT(MONTH FROM NOW());
Resultat:
+---------------------+------------------------ ---+| NU() | UDDRAG(MÅNED FRA NU()) |+--------------------+------------------------ ----------+| 16-05-2021 10:06:21 | 5 |+----------------------+------------------------ --+
Ugyldige datoer
Når en ugyldig dato passeres, EXTRACT()
returnerer null
:
VÆLG UDTRAKT(ÅR FRA 'Fredag');
Resultat:
+-------------------------------------+| UDDRAG(ÅR FRA 'Fredag') |+-----------------------------------+| NULL |+-------------------------------------+
Ugyldig dato/tidsenhed
Ved bestået en ugyldig dato/tidsenhed, EXTRACT()
returnerer en fejl:
SELECT EXTRACT(DECADE FROM '2030-06-25');
Resultat:
FEJL 1064 (42000):Du har en fejl i din SQL-syntaks; tjek manualen, der svarer til din MariaDB-serverversion for den rigtige syntaks til brug i nærheden af 'DECADE FROM '2030-06-25')' på linje 1
Manglende argument
Kalder EXTRACT()
uden at sende nogen argumenter resulterer det i en fejl:
SELECT EXTRACT();
Resultat:
FEJL 1064 (42000):Du har en fejl i din SQL-syntaks; tjek manualen, der svarer til din MariaDB-serverversion for den rigtige syntaks til brug i nærheden af ')' på linje 1