sql >> Databáze >  >> RDS >> MariaDB

Jak EXTRACT() funguje v MariaDB

V MariaDB EXTRACT() je vestavěná funkce data a času, která vrací zadanou jednotku z daného výrazu data nebo data a času.

Syntaxe

Syntaxe vypadá takto:

EXTRACT(unit FROM date)

Kde unit je platná jednotka data a času a date je datum, ze kterého se má jednotka extrahovat.

Příklad

Zde je příklad, který extrahuje rok z data:

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

Výsledek:

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

Zde je další, který vyjímá den:

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

Výsledek:

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

Hodnoty data a času

Funguje také s hodnotami datetime:

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

Výsledek:

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

Jednotky data a času

Zde je další příklad, který prochází každou jednotkou ve výrazu datetime:

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;

Výsledek:

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

Složené jednotky

Zde je příklad, který používá složenou jednotku. Složené jednotky se skládají z několika základních časových jednotek.

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

Výsledek:

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

Nulové jednotky

Výsledkem nulových jednotek je 0 .

Příklad:

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;

Výsledek:

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

Číselná data

Je také možné předávat data jako číslo, pokud to dává smysl jako datum.

Příklad

SELECT EXTRACT(MONTH FROM 20301125);

Výsledek:

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

Nebo dokonce následující (který používá dvouciferný rok):

SELECT EXTRACT(YEAR FROM 301125);

Výsledek:

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

Tady ale pozor – MariaDB v podstatě musí uhodnout, který je to rok. Zde je to, co se stane, když zvýším rok z 30 na 80:

SELECT EXTRACT(YEAR FROM 801125);

Výsledek:

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

Takže v tomto případě předání 30 výsledkem je 2030 ale předání 80 vrátil 1980 .

Také to musí dávat smysl jako rande. Pokud použiji neplatný den, stane se toto:

SELECT EXTRACT(YEAR FROM 20300135);

Výsledek:

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

Další oddělovače

Pro datum můžete použít jiné oddělovače. MariaDB je docela shovívavá, pokud jde o oddělovače dat. Zde je několik platných příkladů:

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

Výsledek (při použití vertikálního výstupu):

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

Aktuální datum

Můžeme předat NOW() jako argument data pro použití aktuálního data:

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

Výsledek:

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

Neplatná data

Když bylo zadáno neplatné datum, EXTRACT() vrátí null :

SELECT EXTRACT(YEAR FROM 'Friday');

Výsledek:

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

Neplatná jednotka data/času

Při předání nesprávné jednotky data/času EXTRACT() vrátí chybu:

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

Výsledek:

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

Chybí argument

Volání EXTRACT() bez předání jakýchkoli argumentů dojde k chybě:

SELECT EXTRACT();

Výsledek:

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. SQL vyberte max(datum) a odpovídající hodnotu

  2. PostgreSQL dotaz běží rychleji s indexovým skenováním, ale engine zvolí hash join

  3. Oprava chyby „ORA-01789:blok dotazu má nesprávný počet sloupců výsledků“

  4. Android sqlite, limit počtu řádků v databázi