sql >> Database teknologi >  >> RDS >> MariaDB

Hvordan EXTRACT() virker i MariaDB

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

  1. gem install pg virker ikke på OSX Lion

  2. Omdøbning af indekser med sp_rename Procedure

  3. Sådan krypteres en visning i SQL Server

  4. Hvad betyder det, når en PostgreSQL-proces er inaktiv i transaktionen?