Skip to content

Archives

  • Januar 2022
  • Dezember 2021
  • November 2021
  • Oktober 2021
  • September 2021

Categories

  • Keine Kategorien
Trend RepositoryArticles and guides
Articles

Database.Guide

On Januar 27, 2022 by admin

Dieser Artikel befasst sich mit dem Unterschied zwischen zwei MySQL-Funktionen: DATEDIFF() und TIMESTAMPDIFF().

Beide Funktionen geben die Differenz zwischen zwei Datums- und/oder Zeitangaben zurück, aber das Ergebnis ist bei beiden Funktionen unterschiedlich.

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

DATEDIFF() TIMESTAMPDIFF()
Erfordert 2 Argumente. Erfordert 3 Argumente.
Subtrahiert das zweite Argument vom ersten (expr1 – expr2). Subtrahiert das zweite Argument vom dritten (expr2 – expr1).
Ergebnis wird als Wert in Tagen ausgedrückt. Ergebnis wird in der Einheit ausgedrückt, die das erste Argument liefert.
Kann nur den Datumswert seiner Argumente vergleichen. Kann den Datums- und Zeitwert seiner Argumente vergleichen.
  • Beispiel 1 – Grundlegende Operation
  • Beispiel 2 – Ändern der Einheit
  • Beispiel 3 – Genauigkeit
  • Beispiel 4 – Falsche Argumenttypen
  • Beispiel 5 – Gemischte Argumenttypen

Beispiel 1 – Grundlegende Operation

Hier ist ein Beispiel, das zeigt, wie diese Funktionen funktionieren und wie unterschiedlich die Ergebnisse sind, auch wenn sie dieselbe Einheit verwenden.

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

Ergebnis:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -1 |+----------+---------------+

So geben beide Funktionen die Differenz in Tagen zurück, aber ein Ergebnis ist positiv und das andere negativ. Das liegt daran, dass DATEDIFF() das zweite Datum vom ersten subtrahiert, während TIMESTAMPDIFF() das erste Datum vom zweiten subtrahiert.

Beispiel 2 – Ändern der Einheit

Wie das vorige Beispiel zeigt, können Sie bei TIMESTAMPDIFF() eine Einheit angeben, in der die Ergebnisse zurückgegeben werden sollen (tatsächlich müssen Sie die Einheit angeben). Bei DATEDIFF() hingegen können Sie keine Einheit angeben. Sie gibt das Ergebnis nur in Tagen zurück.

Wir könnten also das vorherige Beispiel so abändern, dass TIMESTAMPDIFF() die Anzahl der Stunden statt der Tage zurückgibt:

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

Ergebnis:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -24 |+----------+---------------+

Sie können auch bis zu Mikrosekunden gehen:

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

Ergebnis:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -86400000000 |+----------+---------------+

Beispiel 3 – Genauigkeit

Die Genauigkeit von DATEDIFF() ist ein Tag, und TIMESTAMPDIFF() kann bis auf die Mikrosekunde genau sein. Die Genauigkeit von TIMESTAMPDIFF() (und der Vergleichseinheit) hängt jedoch immer noch von der angegebenen Einheit ab.

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-10 23:59:59';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';

Ergebnis:

+----------+------+-------+---------+---------+--------------+| DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds |+----------+------+-------+---------+---------+--------------+| 0 | 0 | 23 | 1439 | 86399 | 86399000000 |+----------+------+-------+---------+---------+--------------+

Und hier ist das Ergebnis, wenn wir das zweite Datum um eine Sekunde erhöhen (was es auf den nächsten Tag bringt):

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-11 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';

Ergebnis:

+----------+------+-------+---------+---------+--------------+| DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds |+----------+------+-------+---------+---------+--------------+| -1 | 1 | 24 | 1440 | 86400 | 86400000000 |+----------+------+-------+---------+---------+--------------+

Hier ist ein weiteres Beispiel, diesmal sehen wir, wie es aussieht, wenn wir Monate, Quartale und Jahre zurückgeben, wenn die Differenz einen Monat (oder 31 Tage) beträgt:

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-11-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(month, @date1, @date2) AS 'Month', TIMESTAMPDIFF(quarter, @date1, @date2) AS 'Quarter', TIMESTAMPDIFF(year, @date1, @date2) AS 'Year';

Ergebnis:

+----------+------+-------+---------+------+| DATEDIFF | Days | Month | Quarter | Year |+----------+------+-------+---------+------+| -31 | 31 | 1 | 0 | 0 |+----------+------+-------+---------+------+

Beispiel 4 – Falsche Argumenttypen

Beide Funktionen geben Null zurück, wenn ihnen der falsche Argumenttyp übergeben wird.

SET @time1 = '12:15:35', @time2 = '00:00:00';SELECT DATEDIFF(@time1, @time2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @time1, @time2) AS 'TIMESTAMPDIFF';

Ergebnis:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| NULL | NULL |+----------+---------------+

Beispiel 5 – Gemischte Argumenttypen

Beide Funktionen erlauben es, ein Datum als ein Argument und eine Datetime als ein anderes Argument zu übergeben.

SET @thedate = '2010-10-11', @thedatetime = '2010-10-10 00:00:00';SELECT DATEDIFF(@thedate, @thedatetime) AS 'DATEDIFF', TIMESTAMPDIFF(day, @thedate, @thedatetime) AS 'TIMESTAMPDIFF';

Ergebnis:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -1 |+----------+---------------+

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Archive

  • Januar 2022
  • Dezember 2021
  • November 2021
  • Oktober 2021
  • September 2021

Meta

  • Anmelden
  • Feed der Einträge
  • Kommentare-Feed
  • WordPress.org
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress