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

MySQL DATEDIFF() vs TIMEDIFF() :quelle est la différence ?

Deux fonctions de date incluses dans MySQL sont DATEDIFF() et TIMEDIFF() .

Les deux fonctions font la même chose, mais avec quelques différences significatives.

Le tableau suivant résume la différence entre ces deux fonctions :

DATEDIFF() TIMEDIFF()
Le résultat est exprimé sous forme de valeur en jours. Le résultat est exprimé en valeur temporelle.
Compare uniquement la valeur de date de ses arguments. Compare la valeur temporelle de ses arguments.
Accepte les expressions de date ou de date et heure. Accepte les expressions d'heure ou de date et d'heure.
Les deux arguments peuvent être de type différent (date ou date et heure). Les deux arguments doivent être du même type (heure ou date et heure).

Exemple 1 - Différence de base

Voici un exemple qui illustre la différence fondamentale entre ces fonctions.

SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00';
SELECT 
  DATEDIFF(@date1, @date2) AS 'DATEDIFF',
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';

Résultat :

+----------+----------+
| DATEDIFF | TIMEDIFF |
+----------+----------+
|        1 | 24:00:00 |
+----------+----------+

Nous pouvons donc voir que DATEDIFF() a renvoyé 1 , signifiant "1 jour", et TIMEDIFF() renvoyé 24:00:00 qui est la représentation temporelle d'exactement 1 jour.

Exemple 2 - Spécification d'une valeur de temps

Voyons ce qui se passe si nous augmentons la valeur temporelle de l'une des variables.

SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00';
SELECT 
  DATEDIFF(@date1, @date2) AS 'DATEDIFF',
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';

Résultat :

+----------+----------+
| DATEDIFF | TIMEDIFF |
+----------+----------+
|        1 | 36:15:35 |
+----------+----------+

Donc DATEDIFF() renvoie le même résultat que dans l'exemple précédent. En effet, il ne compare que les valeurs de date (il ignore toutes les valeurs d'heure).

Le TIMEDIFF() fonction, d'autre part, compare le temps, et donc il renvoie un résultat plus précis. Il nous montre qu'il y a 36 heures, 15 minutes et 35 secondes entre les deux valeurs de date et d'heure.

Exemple 3 - Types d'arguments incorrects

Voici un exemple de ce qui se passe lorsque vous passez les mauvais types d'arguments à chaque fonction.

SET @date1 = '2010-10-11', @date2 = '2010-10-10', @time1 = '12:15:35', @time2 = '00:00:00';
SELECT 
  DATEDIFF(@date1, @date2) AS 'DATEDIFF Date',
  DATEDIFF(@time1, @time2) AS 'DATEDIFF Time',
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF Date',
  TIMEDIFF(@time1, @time2) AS 'TIMEDIFF Time';

Résultat :

+---------------+---------------+---------------+---------------+
| DATEDIFF Date | DATEDIFF Time | TIMEDIFF Date | TIMEDIFF Time |
+---------------+---------------+---------------+---------------+
|             1 |          NULL | 00:00:00      | 12:15:35      |
+---------------+---------------+---------------+---------------+

Les premier et dernier résultats sont corrects, car les types d'arguments corrects ont été transmis. Cependant, les deux résultats du milieu avaient le mauvais type de données transmis et, par conséquent, le résultat correct n'a pas pu être calculé.

Exemple 4 - Types d'arguments mixtes

Voici ce qui se passe si vous fournissez deux types de données différents à chaque fonction.

SET @thedate = '2010-10-11', @thetime = '12:15:35', @thedatetime = '2010-10-10 00:00:00';
SELECT 
  DATEDIFF(@thedate, @thedatetime) AS 'DATEDIFF',
  TIMEDIFF(@thetime, @thedatetime) AS 'TIMEDIFF';

Résultat :

+----------+----------+
| DATEDIFF | TIMEDIFF |
+----------+----------+
|        1 | NULL     |
+----------+----------+

Nous pouvons donc voir que DATEDIFF() gère correctement les types de données mixtes (tant qu'il s'agit de date ou de date et d'heure).

Cependant, TIMEDIFF() nécessite que les deux arguments soient du même type, nous obtenons donc NULL , même si les deux arguments sont d'un type pris en charge par la fonction (heure et date et heure).

Nous pouvons confirmer que les deux types sont en fait pris en charge par cette fonction avec l'exemple suivant :

SET @thetime1 = '12:15:35', @thetime2 = '10:15:35', @thedatetime1 = '2010-10-12 00:00:00', @thedatetime2 = '2010-10-10 00:00:00';
SELECT 
  TIMEDIFF(@thetime1, @thetime2) AS 'time',
  TIMEDIFF(@thedatetime1, @thedatetime2) AS 'datetime';

Résultat :

+----------+----------+
| time     | datetime |
+----------+----------+
| 02:00:00 | 48:00:00 |
+----------+----------+