I MariaDB, TIMEDIFF()
er en indbygget dato- og tidsfunktion, der returnerer forskellen mellem to tidsværdier eller datetime-værdier, udtrykt som en tidsværdi.
Det ligner DATEDIFF()
funktion, bortset fra at DATEDIFF()
’s returværdi er udtrykt i dage.
TIMEDIFF()
accepterer to argumenter, som begge er udtryk for tid eller dato. Den trækker derefter anden gang fra den første.
Syntaks
Syntaksen ser sådan ud:
TIMEDIFF(expr1,expr2)
Det returnerer derefter expr1 - expr2
.
Eksempel
Her er et eksempel:
SELECT TIMEDIFF('10:30:17', '1:10:10');
Resultat:
+---------------------------------+ | TIMEDIFF('10:30:17', '1:10:10') | +---------------------------------+ | 09:20:07 | +---------------------------------+
Her er den igen, men med tidsværdierne byttet rundt:
SELECT TIMEDIFF('1:10:10', '10:30:17');
Resultat:
+---------------------------------+ | TIMEDIFF('1:10:10', '10:30:17') | +---------------------------------+ | -09:20:07 | +---------------------------------+
Dato-tidsværdier
Her er et eksempel, der bruger datetime-værdier:
SELECT TIMEDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59');
Resultat:
+--------------------------------------------------------+ | TIMEDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59') | +--------------------------------------------------------+ | 96:00:01 | +--------------------------------------------------------+
Blandet værdityper
Mens TIMEDIFF()
fungerer på både klokkeslæt og datetime-værdier, begge argumenter skal være af samme type. Blandingstyper resulterer i null
.
Eksempel:
SELECT TIMEDIFF('2030-01-25 00:00:00', '23:59:59');
Resultat:
+---------------------------------------------+ | TIMEDIFF('2030-01-25 00:00:00', '23:59:59') | +---------------------------------------------+ | NULL | +---------------------------------------------+
Udenfor rækkevidde
Intervallet for tidsværdier er '-838:59:59.999999'
til '838:59:59.999999'
. Hvis resultatet er uden for dette interval, er returværdien den øvre grænse for dets relevante interval, og der returneres en advarsel.
Eksempel:
SELECT TIMEDIFF('2040-01-25 00:00:00', '2030-01-25 23:59:59');
Resultat:
+--------------------------------------------------------+ | TIMEDIFF('2040-01-25 00:00:00', '2030-01-25 23:59:59') | +--------------------------------------------------------+ | 838:59:59 | +--------------------------------------------------------+ 1 row in set, 1 warning (0.003 sec)
Lad os tage et kig på advarslen:
SHOW WARNINGS;
Resultat:
+---------+------+-----------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------+ | Warning | 1292 | Truncated incorrect time value: '87624:00:01' | +---------+------+-----------------------------------------------+
Aktuel dato
Her sender vi NOW()
som det andet argument:
SELECT
NOW(),
TIMEDIFF('2021-05-27 10:00:00', NOW());
Resultat:
+---------------------+----------------------------------------+ | NOW() | TIMEDIFF('2021-05-27 10:00:00', NOW()) | +---------------------+----------------------------------------+ | 2021-05-27 14:29:38 | -04:29:38 | +---------------------+----------------------------------------+
Ugyldige argumenter
Når alle ugyldige argumenter sendes, TIMEEDIFF()
returnerer null
:
SELECT TIMEDIFF('Homer', 'Simpson');
Resultat:
+------------------------------+ | TIMEDIFF('Homer', 'Simpson') | +------------------------------+ | NULL | +------------------------------+
Manglende argument
Kalder TIMEDIFF()
det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer i en fejl:
SELECT TIMEDIFF();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TIMEDIFF'
Og:
SELECT TIMEDIFF('2030-05-21');
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TIMEDIFF'