Kategorien:

Datums- und Uhrzeitfunktionen

TIMEDIFF

Berechnet die Differenz zwischen zwei Datums-, Zeit- oder Zeitstempelausdrücken anhand der angegebenen Datums- oder Zeitkomponente. Die Funktion gibt das Ergebnis der Subtraktion des zweiten Arguments vom dritten Argument zurück.

Alternative zu DATEDIFF.

Syntax

TIMEDIFF( <date_or_time_part> , <date_or_time_expr1> , <date_or time_expr2> )
Copy

Argumente

date_or_time_part

Die Maßeinheit für die Zeit. Muss einer der unter Unterstützte Datums- und Uhrzeitkomponenten aufgeführten Werte sein (z. B. month). Der Wert kann ein Zeichenfolgenliteral oder ohne Anführungszeichen sein (z. B. 'month' oder month).

date_or_time_expr1, date_or_time_expr2

Die zu vergleichenden Werte. Diese müssen ein Datum, eine Uhrzeit, ein Zeitstempel oder ein Ausdruck sein, das bzw. der sich zu einem Datum, einer Uhrzeit oder einem Zeitstempel auswerten lässt. Der date_or_time_expr1-Wert wird vom date_or_time_expr2-Wert abgezogen.

Rückgabewerte

Gibt eine Ganzzahl (Integer) zurück, die die Differenz zwischen date_or_time_expr2 und date_or_time_expr1 als Anzahl der Einheiten (Sekunden, Tage usw.) darstellt.

Nutzungshinweise

  • Werte können beispielsweise negativ sein, z. B. -12 Tage.

  • Der Wert von date_or_time_expr1 und date_or_time_expr2 kann ein Datum, eine Uhrzeit oder ein Zeitstempel sein.

  • Die Funktion unterstützt Maßeinheiten für Jahre, Quartale, Monate, Wochen, Tage, Stunden, Minuten, Sekunden, Millisekunden, Mikrosekunden und Nanosekunden.

  • date_or_time_part muss einer der in Unterstützte Datums- und Uhrzeitkomponenten aufgeführten Werte sein.

    Wenn date_or_time_part den Wert week (oder eine seiner Varianten) hat, wird die Ausgabe vom Sitzungsparameter WEEK_START gesteuert. Weitere Details einschließlich Beispiele finden Sie unter Kalenderwochen und Wochentage.

  • Die Einheit (z. B. month), die zur Berechnung der Differenz verwendet wird, bestimmt, welche Teile des Feldes DATE, TIME bzw. TIMESTAMP zur Ermittlung des Ergebnisses herangezogen werden, und bestimmt somit die Genauigkeit des Ergebnisses.

    Kleinere Einheiten werden nicht verwendet, daher werden die Werte nicht gerundet. Obwohl beispielsweise die Differenz zwischen 1. Januar 2021 und 28. Februar 2021 näher an zwei Monaten als an einem Monat liegt, ergibt die folgende Rechnung genau einen Monat:

    DATEDIFF(month, '2021-01-01'::DATE, '2021-02-28'::DATE)
    
    Copy

    Für einen DATE-Wert:

    • year verwendet aus dem Wert nur das Jahr und ignoriert alle anderen Teile.

    • month verwendet aus dem Wert den Monat und das Jahr.

    • day verwendet das gesamte Datum.

    Für einen TIME-Wert:

    • hour verwendet aus dem Wert nur die Stunde und ignoriert alle anderen Teile.

    • minute verwendet aus dem Wert die Stunde und die Minute.

    • second verwendet aus dem Wert die Stunde, die Minute und die Sekunde, aber nicht die Sekundenbruchteile.

    • millisecond verwendet aus dem Wert die Stunde, die Minute und die Sekunde sowie die ersten drei Ziffern der Sekundenbruchteile. Sekundenbruchteile werden nicht gerundet. Beispiel: DATEDIFF(milliseconds, '00:00:00', '00:00:01.1239') gibt 1,123 Sekunden und nicht 1,124 Sekunden zurück.

    • microsecond verwendet aus dem Wert die Stunde, die Minute und die Sekunde sowie die ersten sechs Ziffern der Sekundenbruchteile. Sekundenbruchteile werden nicht gerundet.

    • nanosecond verwendet aus dem Wert die Stunde, die Minute und die Sekunde sowie alle neun Ziffern der Sekundenbruchteile.

    Für einen TIMESTAMP-Wert:

    Die Regeln entsprechen den obigen Regeln für die Datentypen DATE und TIME. Es werden nur die angegebene Einheit und größere Einheiten verwendet.

Beispiele

Hier sehen Sie das Ergebnis der Subtraktion von zwei Datumsangaben, bei denen das zweite Jahr zwei Jahre hinter dem ersten liegt:

SELECT TIMEDIFF(YEAR, '2017-01-01', '2019-01-01') AS Years;
+-------+
| YEARS |
|-------|
|     2 |
+-------+
Copy

Dies zeigt, dass der Wert nicht gerundet, sondern abgeschnitten ist. Die Differenz liegt näher bei 12 Monaten als bei 11, aber Snowflake berechnet die Differenz als 11 Monate:

SELECT TIMEDIFF(MONTH, '2017-01-1', '2017-12-31') AS Months;
+--------+
| MONTHS |
|--------|
|     11 |
+--------+
Copy

Weitere Beispiele finden Sie unter DATEDIFF.