Het is je misschien opgevallen dat MySQL een TIMEDIFF()
. heeft functie en een SUBTIME()
functie. En je hebt misschien gemerkt dat ze in veel gevallen allebei hetzelfde resultaat opleveren. Dus je vraagt je misschien af wat het verschil is tussen deze twee functies?
Laten we het uitzoeken.
Syntaxis
Laten we eerst eens kijken naar de syntaxis van elke functie.
SUBTIME()
SUBTIME(expr1,expr2)
Waar expr1
is een tijd- of datetime-expressie, en expr2
is een tijduitdrukking.
TIMEDIFF()
TIMEDIFF(expr1,expr2)
Waar expr1
en expr2
zijn tijd- of datum-en-tijd-expressies, maar beide moeten van hetzelfde type zijn.
Het verschil
Dus hier is het verschil:
- Bij gebruik van
SUBTIME()
, het tweede argument moet een tijduitdrukking zijn . - Bij gebruik van
TIMEDIFF()
het tweede argument kan een tijd- of datum-en-tijd-expressie zijn, maar in beide gevallen het moet van hetzelfde type zijn als de eerste expressie .
Voorbeeld 1 – Beide argumenten zijn ‘tijd’-waarden
Hier is een vergelijking van beide functies, waarbij beide argumenten tijdwaarden zijn.
SELECT TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF', SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';
Resultaat:
+----------+----------+ | TIMEDIFF | SUBTIME | +----------+----------+ | 01:00:00 | 01:00:00 | +----------+----------+
Zoals verwacht, geven beide functies hetzelfde resultaat.
Voorbeeld 2 – Beide argumenten zijn ‘datetime’-waarden
Hier is een vergelijking van beide functies, waarbij beide argumenten datetime-waarden zijn.
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';
Resultaat:
+-----------+---------+ | TIMEDIFF | SUBTIME | +-----------+---------+ | 744:00:00 | NULL | +-----------+---------+
In dit geval SUBTIME()
heeft een null-waarde geretourneerd omdat het tweede argument geen tijdwaarde was (het was een datetime-waarde).
Voorbeeld 3 – Eerste argument is 'datetime', tweede is 'time'
Hier is het eerste argument een datetime-waarde. Het tweede argument is een tijdswaarde.
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';
Resultaat:
+----------+---------------------+ | TIMEDIFF | SUBTIME | +----------+---------------------+ | NULL | 2021-02-01 01:00:00 | +----------+---------------------+
In dit geval TIMEDIFF()
heeft een null-waarde geretourneerd omdat beide argumenten van een ander type waren.
Voorbeeld 4 – Eerste argument is 'tijd', tweede is 'datetime'
En hier wisselen we het om. Het eerste argument is een tijdswaarde. Het tweede argument is een datetime-waarde.
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';
Resultaat:
+----------+---------+ | TIMEDIFF | SUBTIME | +----------+---------+ | NULL | NULL | +----------+---------+
In dit geval:
TIMEDIFF()
heeft een null-waarde geretourneerd omdat beide argumenten van een ander type waren.SUBTIME()
heeft een null-waarde geretourneerd omdat het alleen een tijdwaarde accepteert voor zijn tweede argument.