I MariaDB, TIMEDIFF()
är en inbyggd datum- och tidsfunktion som returnerar skillnaden mellan två tidsvärden eller datetime-värden, uttryckt som ett tidsvärde.
Det liknar DATEDIFF()
funktion, förutom att DATEDIFF()
's returvärde uttrycks i dagar.
TIMEDIFF()
accepterar två argument, som båda är uttryck för tid eller datum och tid. Den subtraherar sedan andra gången från den första.
Syntax
Syntaxen ser ut så här:
TIMEDIFF(expr1,expr2)
Den returnerar sedan expr1 - expr2
.
Exempel
Här är ett exempel:
SELECT TIMEDIFF('10:30:17', '1:10:10');
Resultat:
+---------------------------------+ | TIMEDIFF('10:30:17', '1:10:10') | +---------------------------------+ | 09:20:07 | +---------------------------------+
Här är den igen, men med tidsvärdena ombytta:
SELECT TIMEDIFF('1:10:10', '10:30:17');
Resultat:
+---------------------------------+ | TIMEDIFF('1:10:10', '10:30:17') | +---------------------------------+ | -09:20:07 | +---------------------------------+
Datetime-värden
Här är ett exempel som använder datetime-värden:
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 | +--------------------------------------------------------+
Blandade värdetyper
Medan TIMEDIFF()
fungerar på både tid och datum och tid, båda argumenten måste vara av samma typ. Blandningstyper resulterar i null
.
Exempel:
SELECT TIMEDIFF('2030-01-25 00:00:00', '23:59:59');
Resultat:
+---------------------------------------------+ | TIMEDIFF('2030-01-25 00:00:00', '23:59:59') | +---------------------------------------------+ | NULL | +---------------------------------------------+
Utanför räckvidd
Intervallet för tidsvärden är '-838:59:59.999999'
till '838:59:59.999999'
. Om resultatet ligger utanför det intervallet är returvärdet den övre gränsen för dess relevanta intervall och en varning returneras.
Exempel:
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)
Låt oss ta en titt på varningen:
SHOW WARNINGS;
Resultat:
+---------+------+-----------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------+ | Warning | 1292 | Truncated incorrect time value: '87624:00:01' | +---------+------+-----------------------------------------------+
Aktuellt datum
Här skickar vi NOW()
som det andra argumentet:
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 | +---------------------+----------------------------------------+
Ogiltiga argument
När alla ogiltiga argument har skickats, TIMEEDIFF()
returnerar null
:
SELECT TIMEDIFF('Homer', 'Simpson');
Resultat:
+------------------------------+ | TIMEDIFF('Homer', 'Simpson') | +------------------------------+ | NULL | +------------------------------+
Argument saknas
Anropar TIMEDIFF()
fel antal argument, eller utan att skicka några argument, resulterar i ett fel:
SELECT TIMEDIFF();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TIMEDIFF'
Och:
SELECT TIMEDIFF('2030-05-21');
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TIMEDIFF'