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

Comment TIMEDIFF() fonctionne dans MariaDB

Dans MariaDB, TIMEDIFF() est une fonction de date et d'heure intégrée qui renvoie la différence entre deux valeurs d'heure ou de date et d'heure, exprimée sous la forme d'une valeur d'heure.

C'est similaire au DATEDIFF() fonction, sauf que DATEDIFF() La valeur de retour de est exprimée en jours.

TIMEDIFF() accepte deux arguments, qui sont tous deux des expressions d'heure ou de date/heure. Il soustrait ensuite la deuxième fois de la première.

Syntaxe

La syntaxe ressemble à ceci :

TIMEDIFF(expr1,expr2) 

Il renvoie ensuite expr1 - expr2 .

Exemple

Voici un exemple :

SELECT TIMEDIFF('10:30:17', '1:10:10'); 

Résultat :

+---------------------------------------------+| HEUREDIFF('10:30:17', '1:10:10') |+------------------------------ ---+| 09:20:07 |+---------------------------------------------+

Le voici à nouveau, mais avec les valeurs de temps inversées :

SELECT TIMEDIFF('1:10:10', '10:30:17'); 

Résultat :

+---------------------------------------------+| HEUREDIFF('1:10:10', '10:30:17') |+------------------------------ ---+| -09:20:07 |+---------------------------------------------+

Valeurs DateHeure

Voici un exemple qui utilise des valeurs datetime :

SELECT TIMEDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59'); 

Résultat :

+------------------------------------------------------------ ----------+| HEUREDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59') |+-------------------- -----------------------------------------+| 96:00:01 |+------------------------------------------------------- -------------+

Types de valeurs mixtes

Tandis que TIMEDIFF() fonctionne à la fois sur les valeurs d'heure et de date/heure, les deux arguments doivent être du même type. Le mélange des types donne null .

Exemple :

SELECT TIMEDIFF('2030-01-25 00:00:00', '23:59:59'); 

Résultat :

+---------------------------------------------+ | HEUREDIFF('2030-01-25 00:00:00', '23:59:59') |+------------------------- --------------------+| NUL |+---------------------------------------------+ 

Hors de portée

La plage des valeurs temporelles est '-838:59:59.999999' à '838:59:59.999999' . Si le résultat est en dehors de cette plage, la valeur de retour est la limite supérieure de sa plage pertinente et un avertissement est renvoyé.

Exemple :

SELECT TIMEDIFF('2040-01-25 00:00:00', '2030-01-25 23:59:59'); 

Résultat :

+------------------------------------------------------------ ----------+| HEUREDIFF('2040-01-25 00:00:00', '2030-01-25 23:59:59') |+-------------------- -----------------------------------------+| 838:59:59 |+------------------------------------------------------- -------------+1 ligne dans l'ensemble, 1 avertissement (0,003 sec)

Examinons l'avertissement :

SHOW WARNINGS; 

Résultat :

+---------+------+---------------------------------- ------------------+| Niveau | Codage | Message |+---------+------+------------------------------ -----------------+| Avertissement | 1292 | Heure incorrecte tronquée :'87624:00:01' |+---------+------+-------- ----------------------------+

Date actuelle

Ici, nous passons NOW() comme deuxième argument :

SELECT 
    NOW(),
    TIMEDIFF('2021-05-27 10:00:00', NOW()); 

Résultat :

+---------------------+------------------------ ----------------+| MAINTENANT() | TIMEDIFF('2021-05-27 10:00:00', MAINTENANT()) |+---------------------+------- ---------------------------------+| 2021-05-27 14:29:38 | -04:29:38 |+---------------------+-------------------- --------------------+

Arguments invalides

Lorsqu'un argument invalide est passé, TIMEEDIFF() renvoie null :

SELECT TIMEDIFF('Homer', 'Simpson'); 

Résultat :

+------------------------------+| TIMEDIFF('Homère', 'Simpson') |+------------------------------+| NULL |+------------------------------+

Argument manquant

Appel de TIMEDIFF() le mauvais nombre d'arguments, ou l'absence d'arguments, entraîne une erreur :

SELECT TIMEDIFF(); 

Résultat :

ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'TIMEDIFF'

Et :

SELECT TIMEDIFF('2030-05-21'); 

Résultat :

ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'TIMEDIFF'