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

Comment TO_SECONDS() fonctionne dans MariaDB

Dans MariaDB, TO_SECONDS() est une fonction de date et d'heure intégrée qui renvoie le nombre de secondes entre l'année 0 et la date ou l'expression datetime donnée.

Syntaxe

La syntaxe ressemble à ceci :

TO_SECONDS(expr)

expr est une valeur date ou datetime.

Exemple

Voici un exemple :

SELECT TO_SECONDS('2020-10-30');

Résultat :

+--------------------------+
| TO_SECONDS('2020-10-30') |
+--------------------------+
|              63771235200 |
+--------------------------+

Le voici avec quelques autres valeurs de temps :

SELECT 
    TO_SECONDS('0000-01-01'),
    TO_SECONDS('1234-10-30');

Résultat :

+--------------------------+--------------------------+
| TO_SECONDS('0000-01-01') | TO_SECONDS('1234-10-30') |
+--------------------------+--------------------------+
|                    86400 |              38967436800 |
+--------------------------+--------------------------+

Valeurs DateHeure

Voici un exemple qui utilise une valeur datetime :

SELECT TO_SECONDS('2020-10-30 10:23:47');

Résultat :

+-----------------------------------+
| TO_SECONDS('2020-10-30 10:23:47') |
+-----------------------------------+
|                       63771272627 |
+-----------------------------------+

Microsecondes

TO_SECONDS() ignore les microsecondes :

SELECT TO_SECONDS('2020-10-30 10:23:47.999999');

Résultat :

+------------------------------------------+
| TO_SECONDS('2020-10-30 10:23:47.999999') |
+------------------------------------------+
|                              63771272627 |
+------------------------------------------+

Dates numériques

Les dates numériques sont prises en charge :

SELECT TO_SECONDS(20201030);

Résultat :

+----------------------+
| TO_SECONDS(20201030) |
+----------------------+
|          63771235200 |
+----------------------+

Date/heure actuelle

Voici un exemple qui utilise NOW() pour renvoyer le nombre de secondes en fonction de la date et de l'heure actuelles :

SELECT 
    NOW(),
    TO_SECONDS(NOW());

Résultat :

+---------------------+-------------------+
| NOW()               | TO_SECONDS(NOW()) |
+---------------------+-------------------+
| 2021-05-31 09:34:16 |       63789672856 |
+---------------------+-------------------+

Cependant, si nous utilisons CURDATE() , nous obtiendrons un résultat différent (car CURDATE() renvoie une valeur de date, alors que NOW() renvoie une valeur datetime).

SELECT 
    NOW(),
    TO_SECONDS(NOW()),
    CURDATE(),
    TO_SECONDS(CURDATE());

Résultat (en utilisant la sortie verticale) :

                NOW(): 2021-05-31 09:35:01
    TO_SECONDS(NOW()): 63789672901
            CURDATE(): 2021-05-31
TO_SECONDS(CURDATE()): 63789638400

Argument invalide

Lorsqu'un argument invalide est passé, TO_SECONDS() renvoie null avec un avertissement :

SELECT TO_SECONDS('Homer');

Résultat :

+---------------------+
| TO_SECONDS('Homer') |
+---------------------+
|                NULL |
+---------------------+
1 row in set, 1 warning (0.000 sec)

Vérifiez l'avertissement :

SHOW WARNINGS;

Résultat :

+---------+------+-------------------------------+
| Level   | Code | Message                       |
+---------+------+-------------------------------+
| Warning | 1292 | Incorrect time value: 'Homer' |
+---------+------+-------------------------------+

Argument manquant

Appel de TO_SECONDS() avec le mauvais nombre d'arguments, ou sans passer d'arguments, génère une erreur :

SELECT TO_SECONDS();

Résultat :

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TO_SECONDS'

Et un autre exemple :

SELECT TO_SECONDS('2020-10-08', '10:09:10');

Résultat :

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TO_SECONDS'