Du kanske har märkt att MySQL har en TIMEDIFF()
funktion och en SUBTIME()
fungera. Och du kanske har märkt att i många fall ger de båda samma resultat. Så du kanske undrar vad skillnaden är mellan dessa två funktioner?
Låt oss ta reda på det.
Syntax
Låt oss först titta på syntaxen för varje funktion.
SUBTIME()
SUBTIME(expr1,expr2)
Där expr1
är ett tid- eller datetime-uttryck och expr2
är ett tidsuttryck.
TIMEDIFF()
TIMEDIFF(expr1,expr2)
Där expr1
och expr2
är tid- eller datum-och-tid-uttryck, men båda måste vara av samma typ.
Skillnaden
Så här är skillnaden:
- När du använder
SUBTIME()
, det andra argumentet måste vara ett tidsuttryck . - När du använder
TIMEDIFF()
det andra argumentet kan vara antingen tid eller datum-och-tid-uttryck, men i båda fallen måste det vara samma typ som det första uttrycket .
Exempel 1 – Båda argumenten är "tidsvärden"
Här är en jämförelse av båda funktionerna, där båda argumenten är tidsvärden.
SELECT TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF', SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';
Resultat:
+----------+----------+ | TIMEDIFF | SUBTIME | +----------+----------+ | 01:00:00 | 01:00:00 | +----------+----------+
Som förväntat returnerar båda funktionerna samma resultat.
Exempel 2 – Båda argumenten är "datetime"-värden
Här är en jämförelse av båda funktionerna, där båda argumenten är datetime-värden.
SELECT TIMEDIFF('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF', SUBTIME('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';
Resultat:
+-----------+---------+ | TIMEDIFF | SUBTIME | +-----------+---------+ | 744:00:00 | NULL | +-----------+---------+
I det här fallet, SUBTIME()
returnerade ett nullvärde eftersom dess andra argument inte var ett tidsvärde (det var ett datetime-värde).
Exempel 3 – Första argumentet är "datumtid", andra är "tid"
Här är det första argumentet ett datetime-värde. Det andra argumentet är ett tidsvärde.
SELECT TIMEDIFF('2021-02-01 10:35:25', '09:35:25') AS 'TIMEDIFF', SUBTIME('2021-02-01 10:35:25', '09:35:25') AS 'SUBTIME';
Resultat:
+----------+---------------------+ | TIMEDIFF | SUBTIME | +----------+---------------------+ | NULL | 2021-02-01 01:00:00 | +----------+---------------------+
I det här fallet, TIMEDIFF()
returnerade ett nullvärde eftersom båda argumenten var av olika typ.
Exempel 4 – Första argumentet är 'tid', andra är 'datumtid'
Och här byter vi om det. Det första argumentet är ett tidsvärde. Det andra argumentet är ett datetime-värde.
SELECT TIMEDIFF('09:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF', SUBTIME('09:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';
Resultat:
+----------+---------+ | TIMEDIFF | SUBTIME | +----------+---------+ | NULL | NULL | +----------+---------+
I det här fallet:
TIMEDIFF()
returnerade ett nullvärde eftersom båda argumenten var av olika typ.SUBTIME()
returnerade ett nullvärde eftersom det bara accepterar ett tidsvärde för sitt andra argument.