I MariaDB, TIMESTAMPDIFF()
er en indbygget dato- og klokkeslætsfunktion, der returnerer forskellen mellem to dato- eller datotidsudtryk.
Syntaks
Syntaksen ser sådan ud:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Hvor unit
er en af følgende værdier:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
Enhederne kan valgfrit have præfikset SQL_TSI_
.
TIMESTAMPDIFF()
returnerer datetime_expr2
– datetime_expr1
.
Det ene udtryk kan være en dato og det andet et datetime. Datoværdier behandles som at have en tidsdel af 00:00:00
hvor det er nødvendigt.
Eksempel
Her er et eksempel til demonstration:
SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01');
Resultat:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01') | +------------------------------------------------+ | 28 | +------------------------------------------------+
Negativt resultat
Ændring af datoerne giver et negativt resultat:
SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01');
Resultat:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01') | +------------------------------------------------+ | -28 | +------------------------------------------------+
Dato-tidsværdier
Her er et eksempel på videregivelse af en datetime-værdi:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01 00:00:00',
'2030-02-01 12:30:45'
)
AS Result;
Resultat:
+--------+ | Result | +--------+ | 12 | +--------+
Jeg har angivet HOUR
, og så ignorerer den minutter og sekunder.
Blandede typer
Her er et eksempel på at overføre både en dato og en datetime-værdi:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01',
'2030-02-01 12:30:45'
)
AS Result;
Resultat:
+--------+ | Result | +--------+ | 12 | +--------+
Som nævnt behandles datoværdier som at have en tidsdel af 00:00:00
.
Tilføjelse af en SQL_TSI_
Præfiks
Enheden kan inkludere en SQL_TSI_
præfiks om nødvendigt:
SELECT TIMESTAMPDIFF(
SQL_TSI_YEAR,
'2030-02-01',
'2035-02-01'
)
AS Result;
Resultat:
+--------+ | Result | +--------+ | 5 | +--------+
Mikrosekunder
Her er et eksempel, der returnerer mikrosekunder:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45.000000',
'2030-02-01 10:30:45.123456'
)
AS Result;
Resultat:
+--------+ | Result | +--------+ | 123456 | +--------+
Her er en, hvor mikrosekunder faktisk ikke er angivet i datetime-værdierne:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45',
'2030-02-01 12:30:45'
)
AS Result;
Resultat:
+------------+ | Result | +------------+ | 7200000000 | +------------+
Aktuel dato
Vi kan sende NOW()
et af datetime-argumenterne for at sammenligne den aktuelle dato og tid med en anden dato:
SELECT
NOW(),
TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff;
Resultat:
+---------------------+------+ | NOW() | Diff | +---------------------+------+ | 2021-05-30 09:29:01 | -60 | +---------------------+------+
Nulledatoer
Hvis en af datoerne er null
, resultatet er null
:
SELECT TIMESTAMPDIFF(
YEAR,
'2030-02-01',
NULL
)
AS Result;
Resultat:
+--------+ | Result | +--------+ | NULL | +--------+
Manglende argument
Kalder TIMESTAMPDIFF()
med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:
SELECT TIMESTAMPDIFF();
Resultat:
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
Og endnu et eksempel:
SELECT TIMESTAMPDIFF('2020-12-09');
Resultat:
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