Sie haben vielleicht bemerkt, dass MySQL ein TIMEDIFF()
hat Funktion und ein SUBTIME()
Funktion. Und Sie haben vielleicht bemerkt, dass beide in vielen Fällen das gleiche Ergebnis zurückgeben. Sie fragen sich vielleicht, was der Unterschied zwischen diesen beiden Funktionen ist?
Finden wir es heraus.
Syntax
Schauen wir uns zuerst die Syntax jeder Funktion an.
SUBTIME()
SUBTIME(expr1,expr2)
Wobei expr1
ein Zeit- oder Datumzeitausdruck ist und expr2
ist ein Zeitausdruck.
TIMEDIFF()
TIMEDIFF(expr1,expr2)
Wobei expr1
und expr2
sind Zeit- oder Datum-und-Zeit-Ausdrücke, aber beide müssen vom gleichen Typ sein.
Der Unterschied
Hier ist also der Unterschied:
- Bei Verwendung von
SUBTIME()
, muss das zweite Argument ein Zeitausdruck sein . - Bei Verwendung von
TIMEDIFF()
Das zweite Argument kann entweder ein Zeit- oder ein Datum-und-Uhrzeit-Ausdruck sein, aber in beiden Fällen muss es denselben Typ wie der erste Ausdruck haben .
Beispiel 1 – Beide Argumente sind „Zeit“-Werte
Hier ist ein Vergleich beider Funktionen, wobei beide Argumente Zeitwerte sind.
SELECT TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF', SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';
Ergebnis:
+----------+----------+ | TIMEDIFF | SUBTIME | +----------+----------+ | 01:00:00 | 01:00:00 | +----------+----------+
Wie erwartet liefern beide Funktionen dasselbe Ergebnis.
Beispiel 2 – Beide Argumente sind „datetime“-Werte
Hier ist ein Vergleich beider Funktionen, wobei beide Argumente datetime-Werte sind.
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';
Ergebnis:
+-----------+---------+ | TIMEDIFF | SUBTIME | +-----------+---------+ | 744:00:00 | NULL | +-----------+---------+
In diesem Fall SUBTIME()
hat einen Nullwert zurückgegeben, weil sein zweites Argument kein Zeitwert war (es war ein Datum/Uhrzeit-Wert).
Beispiel 3 – Das erste Argument ist „datetime“, das zweite ist „time“
Hier ist das erste Argument ein datetime-Wert. Das zweite Argument ist ein Zeitwert.
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';
Ergebnis:
+----------+---------------------+ | TIMEDIFF | SUBTIME | +----------+---------------------+ | NULL | 2021-02-01 01:00:00 | +----------+---------------------+
In diesem Fall TIMEDIFF()
hat einen Nullwert zurückgegeben, da beide Argumente unterschiedlichen Typs waren.
Beispiel 4 – Das erste Argument ist „time“, das zweite ist „datetime“
Und hier tauschen wir es aus. Das erste Argument ist ein Zeitwert. Das zweite Argument ist ein datetime-Wert.
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';
Ergebnis:
+----------+---------+ | TIMEDIFF | SUBTIME | +----------+---------+ | NULL | NULL | +----------+---------+
In diesem Fall:
TIMEDIFF()
hat einen Nullwert zurückgegeben, da beide Argumente von unterschiedlichem Typ waren.SUBTIME()
hat einen Nullwert zurückgegeben, weil es nur einen Zeitwert für sein zweites Argument akzeptiert.