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)
Où 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'