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

TIMEDIFF() vs SUBTIME() dans MySQL :Quelle est la différence ?

Vous avez peut-être remarqué que MySQL a un TIMEDIFF() fonction et un SUBTIME() une fonction. Et vous avez peut-être remarqué que dans de nombreux cas, ils renvoient tous les deux le même résultat. Alors vous vous demandez peut-être quelle est la différence entre ces deux fonctions ?

Découvrons.

Syntaxe

Examinons d'abord la syntaxe de chaque fonction.

SUBTIME()

SUBTIME(expr1,expr2)

expr1 est une expression d'heure ou de date et d'heure, et expr2 est une expression temporelle.

TIMEDIFF()

TIMEDIFF(expr1,expr2)

expr1 et expr2 sont des expressions d'heure ou de date et d'heure, mais les deux doivent être du même type.

La différence

Voici donc la différence :

  • Lors de l'utilisation de SUBTIME() , le deuxième argument doit être une expression temporelle .
  • Lors de l'utilisation de TIMEDIFF() le deuxième argument peut être une expression d'heure ou de date et heure, mais dans les deux cas, il doit être du même type que la première expression .

Exemple 1 - Les deux arguments sont des valeurs de "temps"

Voici une comparaison des deux fonctions, où les deux arguments sont des valeurs temporelles.

SELECT 
    TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF',
    SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';

Résultat :

+----------+----------+
| TIMEDIFF | SUBTIME  |
+----------+----------+
| 01:00:00 | 01:00:00 |
+----------+----------+

Comme prévu, les deux fonctions renvoient le même résultat.

Exemple 2 - Les deux arguments sont des valeurs "datetime"

Voici une comparaison des deux fonctions, où les deux arguments sont des valeurs datetime.

SELECT 
    TIMEDIFF('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF',
    SUBTIME('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';

Résultat :

+-----------+---------+
| TIMEDIFF  | SUBTIME |
+-----------+---------+
| 744:00:00 | NULL    |
+-----------+---------+

Dans ce cas, SUBTIME() a renvoyé une valeur nulle car son deuxième argument n'était pas une valeur d'heure (c'était une valeur datetime).

Exemple 3 - Le premier argument est "datetime", le second est "time"

Ici, le premier argument est une valeur datetime. Le deuxième argument est une valeur temporelle.

SELECT 
    TIMEDIFF('2021-02-01 10:35:25', '09:35:25') AS 'TIMEDIFF',
    SUBTIME('2021-02-01 10:35:25', '09:35:25') AS 'SUBTIME';

Résultat :

+----------+---------------------+
| TIMEDIFF | SUBTIME             |
+----------+---------------------+
| NULL     | 2021-02-01 01:00:00 |
+----------+---------------------+

Dans ce cas, TIMEDIFF() a renvoyé une valeur nulle car les deux arguments étaient d'un type différent.

Exemple 4 - Le premier argument est "time", le second est "datetime"

Et là, on l'échange. Le premier argument est une valeur temporelle. Le deuxième argument est une valeur datetime.

SELECT 
    TIMEDIFF('09:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF',
    SUBTIME('09:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';

Résultat :

+----------+---------+
| TIMEDIFF | SUBTIME |
+----------+---------+
| NULL     | NULL    |
+----------+---------+

Dans ce cas :

  • TIMEDIFF() a renvoyé une valeur nulle car les deux arguments étaient d'un type différent.
    SUBTIME() a renvoyé une valeur nulle car il n'accepte qu'une valeur de temps pour son deuxième argument.