Dans MariaDB, TIMESTAMPDIFF()
est une fonction de date et d'heure intégrée qui renvoie la différence entre deux expressions de date ou de date/heure.
Syntaxe
La syntaxe ressemble à ceci :
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Où unit
est l'une des valeurs suivantes :
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
Les unités peuvent éventuellement avoir un préfixe de SQL_TSI_
.
TIMESTAMPDIFF()
renvoie datetime_expr2
– datetime_expr1
.
Une expression peut être une date et l'autre une date-heure. Les valeurs de date sont traitées comme ayant une partie horaire de 00:00:00
si nécessaire.
Exemple
Voici un exemple pour illustrer :
SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01');
Résultat :
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01') | +------------------------------------------------+ | 28 | +------------------------------------------------+
Résultat négatif
L'inversion des dates donne un résultat négatif :
SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01');
Résultat :
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01') | +------------------------------------------------+ | -28 | +------------------------------------------------+
Valeurs DateHeure
Voici un exemple de transmission d'une valeur datetime :
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01 00:00:00',
'2030-02-01 12:30:45'
)
AS Result;
Résultat :
+--------+ | Result | +--------+ | 12 | +--------+
J'ai spécifié HOUR
, et donc il ignore les minutes et les secondes.
Types mixtes
Voici un exemple de transmission à la fois d'une date et d'une valeur datetime :
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01',
'2030-02-01 12:30:45'
)
AS Result;
Résultat :
+--------+ | Result | +--------+ | 12 | +--------+
Comme mentionné, les valeurs de date sont traitées comme ayant une partie horaire de 00:00:00
.
Ajout d'un SQL_TSI_
Préfixe
L'unité peut inclure un SQL_TSI_
préfixe si nécessaire :
SELECT TIMESTAMPDIFF(
SQL_TSI_YEAR,
'2030-02-01',
'2035-02-01'
)
AS Result;
Résultat :
+--------+ | Result | +--------+ | 5 | +--------+
Microsecondes
Voici un exemple qui renvoie des microsecondes :
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45.000000',
'2030-02-01 10:30:45.123456'
)
AS Result;
Résultat :
+--------+ | Result | +--------+ | 123456 | +--------+
En voici une où les microsecondes ne sont pas réellement spécifiées dans les valeurs datetime :
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45',
'2030-02-01 12:30:45'
)
AS Result;
Résultat :
+------------+ | Result | +------------+ | 7200000000 | +------------+
Date actuelle
Nous pouvons passer NOW()
l'un des arguments datetime afin de comparer la date et l'heure actuelles avec une autre date :
SELECT
NOW(),
TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff;
Résultat :
+---------------------+------+ | NOW() | Diff | +---------------------+------+ | 2021-05-30 09:29:01 | -60 | +---------------------+------+
Dates nulles
Si une des dates est null
, le résultat est null
:
SELECT TIMESTAMPDIFF(
YEAR,
'2030-02-01',
NULL
)
AS Result;
Résultat :
+--------+ | Result | +--------+ | NULL | +--------+
Argument manquant
Appel de TIMESTAMPDIFF()
avec le mauvais nombre d'arguments, ou sans passer d'arguments, génère une erreur :
SELECT TIMESTAMPDIFF();
Résultat :
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
Et un autre exemple :
SELECT TIMESTAMPDIFF('2020-12-09');
Résultat :
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '10, '2020-12-09')' at line 1