In MariaDB, TIMESTAMPDIFF()
is een ingebouwde datum- en tijdfunctie die het verschil tussen twee datum- of datetime-expressies retourneert.
Syntaxis
De syntaxis gaat als volgt:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Waar unit
is een van de volgende waarden:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
De eenheden kunnen optioneel een prefix hebben van SQL_TSI_
.
TIMESTAMPDIFF()
retourneert datetime_expr2
– datetime_expr1
.
De ene uitdrukking kan een datum zijn en de andere een datetime. Datumwaarden worden behandeld alsof ze een tijdsdeel hebben van 00:00:00
waar nodig.
Voorbeeld
Hier is een voorbeeld om te demonstreren:
SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01');
Resultaat:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01') | +------------------------------------------------+ | 28 | +------------------------------------------------+
Negatief resultaat
Het omwisselen van de datums levert een negatief resultaat op:
SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01');
Resultaat:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01') | +------------------------------------------------+ | -28 | +------------------------------------------------+
Datum/tijd-waarden
Hier is een voorbeeld van het doorgeven van een datetime-waarde:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01 00:00:00',
'2030-02-01 12:30:45'
)
AS Result;
Resultaat:
+--------+ | Result | +--------+ | 12 | +--------+
Ik heb HOUR
opgegeven , en dus negeert het het minuten- en secondengedeelte.
Gemengde soorten
Hier is een voorbeeld van het doorgeven van zowel een datum als een datetime-waarde:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01',
'2030-02-01 12:30:45'
)
AS Result;
Resultaat:
+--------+ | Result | +--------+ | 12 | +--------+
Zoals vermeld, worden datumwaarden behandeld als een tijdsdeel van 00:00:00
.
Een SQL_TSI_
toevoegen Voorvoegsel
Het apparaat kan een SQL_TSI_
. bevatten voorvoegsel indien nodig:
SELECT TIMESTAMPDIFF(
SQL_TSI_YEAR,
'2030-02-01',
'2035-02-01'
)
AS Result;
Resultaat:
+--------+ | Result | +--------+ | 5 | +--------+
Microseconden
Hier is een voorbeeld dat microseconden retourneert:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45.000000',
'2030-02-01 10:30:45.123456'
)
AS Result;
Resultaat:
+--------+ | Result | +--------+ | 123456 | +--------+
Hier is er een waarbij microseconden niet echt worden gespecificeerd in de datetime-waarden:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45',
'2030-02-01 12:30:45'
)
AS Result;
Resultaat:
+------------+ | Result | +------------+ | 7200000000 | +------------+
Huidige datum
We kunnen NOW()
doorgeven een van de datetime-argumenten om de huidige datum en tijd te vergelijken met een andere datum:
SELECT
NOW(),
TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff;
Resultaat:
+---------------------+------+ | NOW() | Diff | +---------------------+------+ | 2021-05-30 09:29:01 | -60 | +---------------------+------+
Null-datums
Als een van de datums null
is , het resultaat is null
:
SELECT TIMESTAMPDIFF(
YEAR,
'2030-02-01',
NULL
)
AS Result;
Resultaat:
+--------+ | Result | +--------+ | NULL | +--------+
Ontbrekend argument
TIMESTAMPDIFF()
. aanroepen met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten, resulteert in een fout:
SELECT TIMESTAMPDIFF();
Resultaat:
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
En nog een voorbeeld:
SELECT TIMESTAMPDIFF('2020-12-09');
Resultaat:
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