MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Wie TIMESTAMPDIFF() in MariaDB funktioniert

In MariaDB TIMESTAMPDIFF() ist eine integrierte Datums- und Zeitfunktion, die die Differenz zwischen zwei Datums- oder Datumszeitausdrücken zurückgibt.

Syntax

Die Syntax lautet wie folgt:

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) 

Wobei unit ist einer der folgenden Werte:

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR

Die Einheiten können optional das Präfix SQL_TSI_ haben .

TIMESTAMPDIFF() gibt datetime_expr2 zurück – datetime_expr1 .

Ein Ausdruck kann ein Datum und der andere eine Datumszeit sein. Datumswerte werden so behandelt, als hätten sie einen Zeitteil von 00:00:00 wo nötig.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung:

SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01'); 

Ergebnis:

+---------------------------------------------- --+| TIMESTAMPDIFF(TAG, '2030-02-01', '2030-03-01') |+------------------------------------ --------------------+| 28 |+---------------------------------------------- -+

Negatives Ergebnis

Das Vertauschen der Daten führt zu einem negativen Ergebnis:

SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01'); 

Ergebnis:

+---------------------------------------------- --+| TIMESTAMPDIFF(TAG, '2030-03-01', '2030-02-01') |+----------------------- --------------------+| -28 |+---------------------------------------------- --+

Datum/Uhrzeit-Werte

Hier ist ein Beispiel für die Übergabe eines datetime-Werts:

SELECT TIMESTAMPDIFF(
    HOUR, 
    '2030-02-01 00:00:00', 
    '2030-02-01 12:30:45'
    ) 
AS Result; 

Ergebnis:

+--------+| Ergebnis |+--------+| 12 |+--------+

Ich habe HOUR angegeben , und ignoriert daher den Minuten- und Sekundenteil.

Mischtypen

Hier ist ein Beispiel für die Übergabe eines Datums- und eines Datetime-Werts:

SELECT TIMESTAMPDIFF(
    HOUR, 
    '2030-02-01', 
    '2030-02-01 12:30:45'
    ) 
AS Result; 

Ergebnis:

+--------+| Ergebnis |+--------+| 12 |+--------+

Wie bereits erwähnt, werden Datumswerte so behandelt, als hätten sie einen Zeitteil von 00:00:00 .

Hinzufügen eines SQL_TSI_ Präfix

Die Einheit kann einen SQL_TSI_ enthalten Präfix falls erforderlich:

SELECT TIMESTAMPDIFF(
    SQL_TSI_YEAR, 
    '2030-02-01', 
    '2035-02-01'
    )
AS Result; 

Ergebnis:

+--------+| Ergebnis |+--------+| 5 |+--------+

Mikrosekunden

Hier ist ein Beispiel, das Mikrosekunden zurückgibt:

SELECT TIMESTAMPDIFF(
    MICROSECOND, 
    '2030-02-01 10:30:45.000000',
    '2030-02-01 10:30:45.123456'
    )
AS Result; 

Ergebnis:

+--------+| Ergebnis |+--------+| 123456 |+--------+

Hier ist eine, bei der Mikrosekunden nicht wirklich in den datetime-Werten angegeben sind:

SELECT TIMESTAMPDIFF(
    MICROSECOND, 
    '2030-02-01 10:30:45',
    '2030-02-01 12:30:45'
    )
AS Result; 

Ergebnis:

+------------+| Ergebnis |+------------+| 7200000000 |+------------+

Aktuelles Datum

Wir können NOW() übergeben eines der datetime-Argumente, um das aktuelle Datum und die aktuelle Uhrzeit mit einem anderen Datum zu vergleichen:

SELECT 
    NOW(),
    TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff; 

Ergebnis:

+---------------------+------+| JETZT() | Unterschied |+---------------------+------+| 2021-05-30 09:29:01 | -60 |+---------------------+------+

Nulldaten

Wenn eines der Daten null ist , ist das Ergebnis null :

SELECT TIMESTAMPDIFF(
    YEAR, 
    '2030-02-01',
    NULL
    )
AS Result; 

Ergebnis:

+--------+| Ergebnis |+--------+| NULL |+--------+

Fehlendes Argument

Aufruf von TIMESTAMPDIFF() mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:

SELECT TIMESTAMPDIFF(); 

Ergebnis:

ERROR 1064 (42000):Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax, um sie in der Nähe von ')' in Zeile 1 zu verwenden

Und noch ein Beispiel:

SELECT TIMESTAMPDIFF('2020-12-09'); 

Ergebnis:

ERROR 1064 (42000):Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax, die in der Nähe von '10, '2020-12-09')' in Zeile 1 zu verwenden ist