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

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

Zwei in MySQL enthaltene Datumsfunktionen sind DATEDIFF() und TIMEDIFF() .

Beide Funktionen tun etwas Ähnliches, aber mit einigen bedeutsamen Unterschieden.

Die folgende Tabelle fasst den Unterschied zwischen diesen beiden Funktionen zusammen:

DATEDIFF() TIMEDIFF()
Das Ergebnis wird als Wert in Tagen ausgedrückt. Ergebnis wird als Zeitwert ausgedrückt.
Vergleicht nur den Datumswert seiner Argumente. Vergleicht den Zeitwert seiner Argumente.
Akzeptiert Datums- oder Datums- und Uhrzeitausdrücke. Akzeptiert Zeit- oder Datums- und Zeitausdrücke.
Beide Argumente können unterschiedlichen Typs sein (Datum oder Datum und Uhrzeit). Beide Argumente müssen vom gleichen Typ sein (entweder Uhrzeit oder Datum und Uhrzeit).

Beispiel 1 – Grundlegender Unterschied

Hier ist ein Beispiel, das den grundlegenden Unterschied zwischen diesen Funktionen demonstriert.

SET @date1 ='2010-10-11 00:00:00', @date2 ='2010-10-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';

Ergebnis:

+----------+----------+| DATEDIFF | TIMEDIFF |+----------+----------+| 1 | 24:00:00 |+----------+----------+

Wir können also DATEDIFF() sehen gab 1 zurück , was „1 Tag“ bedeutet, und TIMEDIFF() 24:00:00 zurückgegeben das ist die Zeitdarstellung von genau 1 Tag.

Beispiel 2 – Angabe eines Zeitwerts

Mal sehen, was passiert, wenn wir den Zeitwert einer der Variablen erhöhen.

SET @date1 ='2010-10-11 12:15:35', @date2 ='2010-10-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';

Ergebnis:

+----------+----------+| DATEDIFF | TIMEDIFF |+----------+----------+| 1 | 36:15:35 |+----------+----------+

Also DATEDIFF() gibt das gleiche Ergebnis wie im vorherigen Beispiel zurück. Dies liegt daran, dass nur die Datumswerte verglichen werden (Zeitwerte werden ignoriert).

Das TIMEDIFF() Die Funktion hingegen vergleicht die Zeit und gibt daher ein genaueres Ergebnis zurück. Es zeigt uns, dass zwischen den beiden Datums- und Uhrzeitwerten 36 Stunden, 15 Minuten und 35 Sekunden liegen.

Beispiel 3 – Falsche Argumenttypen

Hier ist ein Beispiel dafür, was passiert, wenn Sie die falschen Argumenttypen an die einzelnen Funktionen übergeben.

SET @date1 ='2010-10-11', @date2 ='2010-10-10', @time1 ='12:15:35', @time2 ='00:00:00';SELECT DATEDIFF (@date1, @date2) AS 'DATEDIFF Date', DATEDIFF(@time1, @time2) AS 'DATEDIFF Time', TIMEDIFF(@date1, @date2) AS 'TIMEDIFF Date', TIMEDIFF(@time1, @time2) AS 'TIMEDIFF Zeit';

Ergebnis:

+----------+---------------+------------- -+---------------+| DATEDIFF Datum | DATEDIFF Zeit | TIMEDIFF Datum | TIMEDIFF Zeit |+----------+---------------+------------- -+---------------+| 1 | NULL | 00:00:00 | 12:15:35 |+----------+---------------+----------- ----+---------------+

Das erste und das letzte Ergebnis sind in Ordnung, da die richtigen Argumenttypen übergeben wurden. Bei den mittleren beiden Ergebnissen wurde jedoch der falsche Datentyp übergeben und daher konnte das korrekte Ergebnis nicht berechnet werden.

Beispiel 4 – Gemischte Argumenttypen

Folgendes passiert, wenn Sie jeder Funktion zwei verschiedene Datentypen bereitstellen.

SET @thedate ='2010-10-11', @thetime ='12:15:35', @thedatetime ='2010-10-10 00:00:00';SELECT DATEDIFF(@thedate, @thedatetime ) AS 'DATEDIFF', TIMEDIFF(@thetime, @thedatetime) AS 'TIMEDIFF';

Ergebnis:

+----------+----------+| DATEDIFF | TIMEDIFF |+----------+----------+| 1 | NULL |+----------+----------+

Wir können also DATEDIFF() sehen handhabt gemischte Datentypen gut (solange sie entweder Datum oder Datum und Uhrzeit sind).

Allerdings TIMEDIFF() erfordert, dass beide Argumente vom gleichen Typ sind, also erhalten wir NULL , obwohl beide Argumente von einem Typ sind, den die Funktion unterstützt (time und date-and-time).

Wir können anhand des folgenden Beispiels bestätigen, dass beide Typen tatsächlich von dieser Funktion unterstützt werden:

SET @thetime1 ='12:15:35', @thetime2 ='10:15:35', @thedatetime1 ='2010-10-12 00:00:00', @thedatetime2 ='2010-10- 10 00:00:00';SELECT TIMEDIFF(@thetime1, @thetime2) AS 'time', TIMEDIFF(@thedatetime1, @thedatetime2) AS 'datetime';

Ergebnis:

+----------+----------+| Zeit | DatumZeit |+----------+----------+| 02:00:00 | 48:00:00 |+----------+----------+