Du har måske bemærket, at MySQL har en TIMEDIFF()
funktion og en SUBTIME()
fungere. Og du har måske bemærket, at i mange tilfælde giver de begge det samme resultat. Så du undrer dig måske over, hvad forskellen er mellem disse to funktioner?
Lad os finde ud af det.
Syntaks
Lad os først se på syntaksen for hver funktion.
SUBTIME()
SUBTIME(expr1,expr2)
Hvor expr1
er et klokkeslæt eller datetime-udtryk, og expr2
er et tidsudtryk.
TIMEDIFF()
TIMEDIFF(expr1,expr2)
Hvor expr1
og expr2
er tids- eller dato-og-tidsudtryk, men begge skal være af samme type.
Forskellen
Så her er forskellen:
- Når du bruger
SUBTIME()
, skal det andet argument være et tidsudtryk . - Når du bruger
TIMEDIFF()
det andet argument kan enten være klokkeslæt eller dato-og-tids-udtryk, men i begge tilfælde skal det være den samme type som det første udtryk .
Eksempel 1 – Begge argumenter er 'tidsværdier'
Her er en sammenligning af begge funktioner, hvor begge argumenter er tidsværdier.
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 forventet returnerer begge funktioner det samme resultat.
Eksempel 2 – Begge argumenter er 'datetime'-værdier
Her er en sammenligning af begge funktioner, hvor begge argumenter er datetime-værdier.
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 dette tilfælde SUBTIME()
returnerede en null-værdi, fordi dets andet argument ikke var en tidsværdi (det var en datetime-værdi).
Eksempel 3 – Første argument er 'datetime', andet er 'time'
Her er det første argument en datetime-værdi. Det andet argument er en tidsværdi.
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 dette tilfælde TIMEDIFF()
returnerede en null-værdi, fordi begge argumenter var af forskellig type.
Eksempel 4 – Første argument er 'tid', andet er 'datotid'
Og her bytter vi det rundt. Det første argument er en tidsværdi. Det andet argument er en datetime-værdi.
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 dette tilfælde:
TIMEDIFF()
returnerede en null-værdi, fordi begge argumenter var af forskellig type.SUBTIME()
returnerede en null-værdi, fordi den kun accepterer en tidsværdi for sit andet argument.