Mysql
 sql >> Datenbank >  >> RDS >> Mysql

TIMEDIFF() vs. SUBTIME() in MySQL:Was ist der Unterschied?

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.