MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Comment EXTRACT () fonctionne dans MariaDB

Dans MariaDB, EXTRACT() est une fonction de date et d'heure intégrée qui renvoie l'unité spécifiée à partir d'une expression de date ou de date/heure donnée.

Syntaxe

La syntaxe ressemble à ceci :

EXTRACT(unit FROM date)

unit est une unité de date et d'heure valide, et date est la date à partir de laquelle extraire cette unité.

Exemple

Voici un exemple qui extrait l'année d'une date :

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

Résultat :

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

En voici un autre qui extrait le jour :

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

Résultat :

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

Valeurs DateHeure

Cela fonctionne également avec les valeurs datetime :

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

Résultat :

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

Unités de date et d'heure

Voici un autre exemple qui traverse chaque unité dans l'expression 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;

Résultat :

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

Unités composites

Voici un exemple qui utilise une unité composite. Les unités composites se composent de plusieurs unités de temps de base.

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

Résultat :

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

Zéro Unités

Zéro unité donne 0 .

Exemple :

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;

Résultat :

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

Dates numériques

Il est également possible de transmettre des dates sous forme de nombre, tant que cela a du sens en tant que date.

Exemple

SELECT EXTRACT(MONTH FROM 20301125);

Résultat :

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

Ou même le suivant (qui utilise une année à deux chiffres) :

SELECT EXTRACT(YEAR FROM 301125);

Résultat :

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

Mais soyez prudent ici - MariaDB doit essentiellement deviner de quelle année il s'agit. Voici ce qui se passe si j'augmente l'année de 30 à 80 :

SELECT EXTRACT(YEAR FROM 801125);

Résultat :

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

Donc dans ce cas, passer 30 a abouti à 2030 mais passant 80 renvoyé 1980 .

En outre, cela doit avoir un sens en tant que date. Voici ce qui se passe si j'utilise un jour invalide :

SELECT EXTRACT(YEAR FROM 20300135);

Résultat :

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

Autres délimiteurs

Vous pouvez utiliser d'autres délimiteurs pour la date. MariaDB est assez indulgent en ce qui concerne les délimiteurs de dates. Voici quelques exemples valides :

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

Résultat (en utilisant la sortie verticale) :

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

Date actuelle

Nous pouvons passer NOW() comme argument de date pour utiliser la date actuelle :

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

Résultat :

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

Dates invalides

Lorsqu'une date invalide est passée, EXTRACT() renvoie null :

SELECT EXTRACT(YEAR FROM 'Friday');

Résultat :

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

Unité de date/heure non valide

En cas de passage d'une unité de date/heure invalide, EXTRACT() renvoie une erreur :

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

Résultat :

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

Argument manquant

Appel de EXTRACT() sans passer d'arguments entraîne une erreur :

SELECT EXTRACT();

Résultat :

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