Skip to content

Archives

  • janvier 2022
  • décembre 2021
  • novembre 2021
  • octobre 2021
  • septembre 2021

Categories

  • Aucune catégorie
Trend RepositoryArticles and guides
Articles

Database.Guide

On janvier 27, 2022 by admin

Cet article examine la différence entre deux fonctions MySQL ; DATEDIFF() et TIMESTAMPDIFF().

Les deux fonctions retournent la différence entre deux dates et/ou heures, mais le résultat est différent entre les deux fonctions.

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

DATEDIFF() TIMESTAMPDIFF()
Requiert 2 arguments. Requiert 3 arguments.
Soustrait le 2ème argument du 1er (expr1 – expr2). Soustrait le 2ème argument du 3ème (expr2 – expr1).
Le résultat est exprimé comme une valeur en jours. Le résultat est exprimé comme l’unité fournie par le premier argument.
Peut comparer uniquement la valeur de la date de ses arguments. Peut comparer la valeur de la date et de l’heure de ses arguments.
  • Exemple 1 – Fonctionnement de base
  • Exemple 2 – Changer l’unité
  • Exemple 3 – Précision
  • Exemple 4 – Mauvais types d’arguments
  • Exemple 5 – Types d’arguments mélangés

Exemple 1 – Fonctionnement de base

Voici un exemple qui démontre comment ces fonctions fonctionnent, et comment les résultats sont différents, même en utilisant la même unité.

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

Résultat:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -1 |+----------+---------------+

Donc les deux fonctions retournent la différence en jours, cependant un résultat est positif et l’autre négatif. C’est parce que DATEDIFF() soustrait la deuxième date de la première, alors que TIMESTAMPDIFF() soustrait la première date de la deuxième.

Exemple 2 – Changer l’unité

Comme le démontre l’exemple précédent, la TIMESTAMPDIFF() vous permet de spécifier une unité pour que les résultats soient retournés sous (en fait, elle vous demande de spécifier l’unité). D’autre part, DATEDIFF() ne vous permet pas de spécifier une unité. Elle renvoie uniquement le résultat en jours.

On pourrait donc modifier l’exemple précédent pour que TIMESTAMPDIFF() renvoie le nombre d’heures au lieu de jours:

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

Résultat:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -24 |+----------+---------------+

On peut aller jusqu’à la microseconde :

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

Résultat:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -86400000000 |+----------+---------------+

Exemple 3 – Précision

La précision de DATEDIFF() est d’un jour, et TIMESTAMPDIFF() peut aller jusqu’à la microseconde. Cependant, la précision de TIMESTAMPDIFF() (et l’unité qu’elle compare) dépend toujours de l’unité spécifiée.

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-10 23:59:59';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';

Résultat:

+----------+------+-------+---------+---------+--------------+| DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds |+----------+------+-------+---------+---------+--------------+| 0 | 0 | 23 | 1439 | 86399 | 86399000000 |+----------+------+-------+---------+---------+--------------+

Et voici le résultat si on incrémente la 2e date d’une seconde (ce qui l’amène au jour suivant):

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-11 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';

Résultat :

+----------+------+-------+---------+---------+--------------+| DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds |+----------+------+-------+---------+---------+--------------+| -1 | 1 | 24 | 1440 | 86400 | 86400000000 |+----------+------+-------+---------+---------+--------------+

Voici un autre exemple, cette fois-ci en voyant comment cela se présente lorsque nous retournons les mois, les quarts et les années lorsque la différence est d’un mois (ou 31 jours):

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-11-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(month, @date1, @date2) AS 'Month', TIMESTAMPDIFF(quarter, @date1, @date2) AS 'Quarter', TIMESTAMPDIFF(year, @date1, @date2) AS 'Year';

Résultat:

+----------+------+-------+---------+------+| DATEDIFF | Days | Month | Quarter | Year |+----------+------+-------+---------+------+| -31 | 31 | 1 | 0 | 0 |+----------+------+-------+---------+------+

Exemple 4 – Mauvais types d’arguments

Les deux fonctions retournent null si on leur passe le mauvais type d’argument.

SET @time1 = '12:15:35', @time2 = '00:00:00';SELECT DATEDIFF(@time1, @time2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @time1, @time2) AS 'TIMESTAMPDIFF';

Résultat:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| NULL | NULL |+----------+---------------+

Exemple 5 – Types d’arguments mélangés

Les deux fonctions vous permettent de fournir une date comme un argument et un datetime comme un autre argument.

SET @thedate = '2010-10-11', @thedatetime = '2010-10-10 00:00:00';SELECT DATEDIFF(@thedate, @thedatetime) AS 'DATEDIFF', TIMESTAMPDIFF(day, @thedate, @thedatetime) AS 'TIMESTAMPDIFF';

Résultat:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -1 |+----------+---------------+

.

Laisser un commentaire Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Archives

  • janvier 2022
  • décembre 2021
  • novembre 2021
  • octobre 2021
  • septembre 2021

Méta

  • Connexion
  • Flux des publications
  • Flux des commentaires
  • Site de WordPress-FR
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress