sql >> Database >  >> RDS >> MariaDB

Hoe EXTRACT() werkt in MariaDB

In MariaDB, EXTRACT() is een ingebouwde datum- en tijdfunctie die de opgegeven eenheid retourneert uit een bepaalde datum- of datetime-expressie.

Syntaxis

De syntaxis gaat als volgt:

EXTRACT(unit FROM date)

Waar unit is een geldige datum- en tijdseenheid, en date is de datum om die eenheid uit te halen.

Voorbeeld

Hier is een voorbeeld dat het jaar uit een datum haalt:

SELECT EXTRACT(YEAR FROM '2030-12-25');

Resultaat:

+---------------------------------+
| EXTRACT(YEAR FROM '2030-12-25') |
+---------------------------------+
|                            2030 |
+---------------------------------+

Hier is er nog een die de dag extraheert:

SELECT EXTRACT(DAY FROM '2030-12-25');

Resultaat:

+--------------------------------+
| EXTRACT(DAY FROM '2030-12-25') |
+--------------------------------+
|                             25 |
+--------------------------------+

Datum/tijd-waarden

Het werkt ook met datetime-waarden:

SELECT EXTRACT(HOUR FROM '2030-02-01 10:30:45');

Resultaat:

+------------------------------------------+
| EXTRACT(HOUR FROM '2030-02-01 10:30:45') |
+------------------------------------------+
|                                       10 |
+------------------------------------------+

Datum- en tijdseenheden

Hier is nog een voorbeeld dat door elke eenheid in de datetime-expressie loopt:

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 FROM '2030-02-01 10:30:45.123456') AS DAY,
    EXTRACT(HOUR FROM '2030-02-01 10:30:45.123456') AS HOUR,
    EXTRACT(MINUTE FROM '2030-02-01 10:30:45.123456') AS MINUTE,
    EXTRACT(SECOND FROM '2030-02-01 10:30:45.123456') AS SECOND,
    EXTRACT(MICROSECOND FROM '2030-02-01 10:30:45.123456') AS MICROSECOND;

Resultaat:

+------+-------+------+------+--------+--------+-------------+
| YEAR | MONTH | DAY  | HOUR | MINUTE | SECOND | MICROSECOND |
+------+-------+------+------+--------+--------+-------------+
| 2030 |     2 |    1 |   10 |     30 |     45 |      123456 |
+------+-------+------+------+--------+--------+-------------+

Samengestelde eenheden

Hier is een voorbeeld dat een samengestelde eenheid gebruikt. Samengestelde eenheden bestaan ​​uit meerdere basistijdseenheden.

SELECT EXTRACT(YEAR_MONTH FROM '2030-02-01');

Resultaat:

+---------------------------------------+
| EXTRACT(YEAR_MONTH FROM '2030-02-01') |
+---------------------------------------+
|                                203002 |
+---------------------------------------+

Nul eenheden

Nul eenheden resulteren in 0 .

Voorbeeld:

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 FROM '0000-00-00 00:00:00.000000') AS DAY,
    EXTRACT(HOUR FROM '0000-00-00 00:00:00.000000') AS HOUR,
    EXTRACT(MINUTE FROM '0000-00-00 00:00:00.000000') AS MINUTE,
    EXTRACT(SECOND FROM '0000-00-00 00:00:00.000000') AS SECOND,
    EXTRACT(MICROSECOND FROM '0000-00-00 00:00:00.000000') AS MICROSECOND;

Resultaat:

+------+-------+------+------+--------+--------+-------------+
| YEAR | MONTH | DAY  | HOUR | MINUTE | SECOND | MICROSECOND |
+------+-------+------+------+--------+--------+-------------+
|    0 |     0 |    0 |    0 |      0 |      0 |           0 |
+------+-------+------+------+--------+--------+-------------+

Numerieke datums

Het is ook mogelijk om datums als een getal door te geven, zolang het maar logisch is als een datum.

Voorbeeld

SELECT EXTRACT(MONTH FROM 20301125);

Resultaat:

+------------------------------+
| EXTRACT(MONTH FROM 20301125) |
+------------------------------+
|                           11 |
+------------------------------+

Of zelfs het volgende (met een jaartal van twee cijfers):

SELECT EXTRACT(YEAR FROM 301125);

Resultaat:

+---------------------------+
| EXTRACT(YEAR FROM 301125) |
+---------------------------+
|                      2030 |
+---------------------------+

Maar wees hier voorzichtig - MariaDB moet eigenlijk raden welk jaar het is. Dit is wat er gebeurt als ik het jaar verhoog van 30 naar 80:

SELECT EXTRACT(YEAR FROM 801125);

Resultaat:

+---------------------------+
| EXTRACT(YEAR FROM 801125) |
+---------------------------+
|                      1980 |
+---------------------------+

Dus in dit geval, het doorgeven van 30 resulteerde in 2030 maar slagen voor 80 geretourneerd 1980 .

Het moet ook logisch zijn als een date. Dit gebeurt er als ik een ongeldige dag gebruik:

SELECT EXTRACT(YEAR FROM 20300135);

Resultaat:

+-----------------------------+
| EXTRACT(YEAR FROM 20300135) |
+-----------------------------+
|                        NULL |
+-----------------------------+

Andere scheidingstekens

U kunt andere scheidingstekens voor de datum gebruiken. MariaDB is behoorlijk vergevingsgezind als het gaat om scheidingstekens op datums. Hier zijn enkele geldige voorbeelden:

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

Resultaat (met verticale uitvoer):

EXTRACT(MONTH FROM '2030/06/25'): 6
EXTRACT(MONTH FROM '2030,06,25'): 6
EXTRACT(MONTH FROM '2030:06:25'): 6
EXTRACT(MONTH FROM '2030;06!25'): 6

Huidige datum

We kunnen NOW() doorgeven als het datumargument om de huidige datum te gebruiken:

SELECT 
    NOW(),
    EXTRACT(MONTH FROM NOW());

Resultaat:

+---------------------+---------------------------+
| NOW()               | EXTRACT(MONTH FROM NOW()) |
+---------------------+---------------------------+
| 2021-05-16 10:06:21 |                         5 |
+---------------------+---------------------------+

Ongeldige datums

Wanneer een ongeldige datum is gepasseerd, EXTRACT() retourneert null :

SELECT EXTRACT(YEAR FROM 'Friday');

Resultaat:

+-----------------------------+
| EXTRACT(YEAR FROM 'Friday') |
+-----------------------------+
|                        NULL |
+-----------------------------+

Ongeldige datum/tijd-eenheid

Wanneer een ongeldige datum/tijd-eenheid is gepasseerd, EXTRACT() geeft een fout:

SELECT EXTRACT(DECADE FROM '2030-06-25');

Resultaat:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DECADE FROM '2030-06-25')' at line 1

Ontbrekend argument

EXTRACT() . aanroepen zonder het doorgeven van argumenten resulteert in een fout:

SELECT EXTRACT();

Resultaat:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

  1. Wat is het MySQL-equivalent van EXPLAIN ANALYZE van PostgreSQL?

  2. SQL Server gebruikt een hoge CPU bij het zoeken in nvarchar-strings

  3. DB-testgegevens genereren

  4. Die verdomd grote objecten