Catégories :

Fonctions de date et d’heure

TIMEDIFF

Calcule la différence entre deux expressions de date, d’heure ou d’horodatage en fonction de la partie de date ou d’heure spécifiée. La fonction renvoie le résultat de la soustraction du deuxième argument et du troisième argument.

Alternative pour DATEDIFF.

Syntaxe

TIMEDIFF( <date_or_time_part> , <date_or_time_expr1> , <date_or time_expr2> )
Copy

Arguments

date_or_time_part

L’unité de temps. Doit être l’une des valeurs répertoriées dans Parties de date et d’heure prises en charge (par exemple month). La valeur peut être un littéral de chaîne ou peut être sans guillemets (par exemple 'month' ou month).

date_or_time_expr1, date_or_time_expr2

Les valeurs à comparer. Doit être une date, une heure, un horodatage ou une expression pouvant correspondre à une date, une heure ou un horodatage. La valeur date_or_time_expr1 est soustraite de date_or_time_expr2.

Renvoie

Renvoie un entier représentant le nombre d’unités (secondes, jours, etc.) entre date_or_time_expr2 et date_or_time_expr1.

Notes sur l’utilisation

  • Les valeurs de sortie peuvent être négatives, par exemple, -12 jours.

  • date_or_time_expr1 et date_or_time_expr2 peuvent être une date, une heure ou un horodatage.

  • La fonction prend en charge les années, les trimestres, les mois, les semaines, les jours, les heures, les minutes, les secondes, les millisecondes, les microsecondes et les nanosecondes.

  • date_or_time_part doit être l’une des valeurs répertoriées dans Parties de date et d’heure prises en charge.

    Si date_or_time_part est week (ou l’une de ses variations), la sortie est contrôlée par le paramètre de session WEEK_START. Pour plus de détails, y compris des exemples, voir Semaines civiles et jours de semaine.

  • L’unité (par exemple month) utilisée pour calculer la différence détermine quelles parties du champ DATE, TIME ou TIMESTAMP sont utilisées pour déterminer le résultat et ainsi la précision du résultat.

    Les unités plus petites ne sont pas utilisées, les valeurs ne sont donc pas arrondies. Par exemple, même si la différence entre le 1er janvier 2021 et le 28 février 2021 est plus proche de deux mois que d’un mois, ce qui suit donne un mois :

    DATEDIFF(month, '2021-01-01'::DATE, '2021-02-28'::DATE)
    
    Copy

    Pour une valeur DATE :

    • year utilise uniquement l’année et ignore toutes les autres parties.

    • month utilise le mois et l’année.

    • day utilise la date entière.

    Pour une valeur TIME :

    • hour utilise uniquement l’heure et ignore toutes les autres parties.

    • minute utilise l’heure et les minutes.

    • second utilise l’heure, la minute et la seconde, mais pas les secondes fractionnées.

    • millisecond utilise l’heure, la minute, la seconde et les trois premiers chiffres des secondes fractionnées. Les secondes fractionnées ne sont pas arrondies. Par exemple, DATEDIFF(milliseconds, '00:00:00', '00:00:01.1239') renvoie 1,123 seconde, et non 1,124 seconde.

    • microsecond utilise l’heure, la minute, la seconde et les six premiers chiffres des secondes fractionnelles. Les secondes fractionnées ne sont pas arrondies.

    • nanosecond utilise l’heure, la minute, la seconde et les neuf chiffres des secondes fractionnelles.

    Pour une valeur TIMESTAMP :

    Les règles correspondent aux règles pour les types de données DATE et TIME ci-dessus. Seules l’unité spécifiée et les unités plus grandes sont utilisées.

Exemples

Ceci montre le résultat de la soustraction de deux dates, dans lesquelles la seconde se situe deux ans plus tard que la première :

SELECT TIMEDIFF(YEAR, '2017-01-01', '2019-01-01') AS Years;
+-------+
| YEARS |
|-------|
|     2 |
+-------+
Copy

Cela montre que la valeur est tronquée plutôt qu’arrondie. La différence est plus proche de 12 mois que de 11, mais nous calculons la différence comme 11 mois :

SELECT TIMEDIFF(MONTH, '2017-01-1', '2017-12-31') AS Months;
+--------+
| MONTHS |
|--------|
|     11 |
+--------+
Copy

Des exemples supplémentaires figurent dans DATEDIFF.