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

Comment TIMESTAMPDIFF() fonctionne dans MariaDB

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)

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