MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Как EXTRACT() работи в MariaDB

В MariaDB, EXTRACT() е вградена функция за дата и час, която връща посочената единица от даден израз за дата или час.

Синтаксис

Синтаксисът е така:

EXTRACT(unit FROM date)

Където unit е валидна единица за дата и час и date е датата, от която се извлича тази единица.

Пример

Ето пример, който извлича годината от дата:

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

Резултат:

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

Ето още един, който извлича деня:

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

Резултат:

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

Стойности за дата и час

Работи и със стойности за дата и час:

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

Резултат:

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

Единици за дата и час

Ето още един пример, който преминава през всяка единица в израза за дата и час:

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;

Резултат:

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

Съставни единици

Ето пример, който използва съставна единица. Съставните единици се състоят от множество основни единици за време.

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

Резултат:

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

Нулеви единици

Нулевите единици водят до 0 .

Пример:

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;

Резултат:

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

Числови дати

Възможно е също да предавате дати като число, стига да има смисъл като дата.

Пример

SELECT EXTRACT(MONTH FROM 20301125);

Резултат:

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

Или дори следното (което използва двуцифрена година):

SELECT EXTRACT(YEAR FROM 301125);

Резултат:

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

Но бъдете внимателни тук – MariaDB по принцип трябва да отгатне коя година е. Ето какво се случва, ако увелича годината от 30 на 80:

SELECT EXTRACT(YEAR FROM 801125);

Резултат:

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

Така че в този случай се предава 30 доведе до 2030 но предава 80 върнати 1980 .

Освен това трябва да има смисъл като дата. Ето какво се случва, ако използвам невалиден ден:

SELECT EXTRACT(YEAR FROM 20300135);

Резултат:

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

Други ограничители

Можете да използвате други разделители за датата. MariaDB е доста прощаваща, когато става въпрос за разделители на дати. Ето няколко валидни примера:

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

Резултат (с помощта на вертикален изход):

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

Текуща дата

Можем да предадем NOW() като аргумент за дата, за да използвате текущата дата:

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

Резултат:

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

Невалидни дати

При преминаване на невалидна дата, EXTRACT() връща null :

SELECT EXTRACT(YEAR FROM 'Friday');

Резултат:

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

Невалидна единица за дата/час

Когато се подаде невалидна единица за дата/час, EXTRACT() връща грешка:

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

Резултат:

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

Липсващ аргумент

Извикване на EXTRACT() без подаване на аргументи води до грешка:

SELECT EXTRACT();

Резултат:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. HOUR() срещу EXTRACT(HOUR ...) в MariaDB:Каква е разликата?

  2. Благодарим ви, Amazon, че ни вдъхновявате да предоставим по-добър DBaaS:SkySQL

  3. PCI съответствие за MySQL и MariaDB с ClusterControl

  4. MariaDB DATABASE() Обяснено

  5. Как работи FIELD() в MariaDB