Kategorien:

Datums- und Uhrzeitfunktionen

DATEDIFF

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

Das Minuszeichen („-“) kann auch zum Subtrahieren von Datumsangaben verwendet werden.

Siehe auch:

TIMEDIFF , TIMESTAMPDIFF

Syntax

Syntax für DATEDIFF

DATEDIFF( <date_or_time_part>, <date_or_time_expr1>, <date_or_time_expr2> )

Syntax für Minuszeichen

<date_or_time_expr2> - <date_or_time_expr1>

Argumente

  • Datum_oder_Zeit_Teil muss einer der unter Unterstützte Datums- und Zeitabschnitte aufgeführten Werte sein.

  • Datum_oder_Zeit_Ausdruck1 und Datum_oder_Zeit_Ausdruck2 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 Wert Datum_oder_Zeit_Ausdruck1 wird von Datum_oder_Zeit_Ausdruck2 abgezogen.

Rückgabewerte

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

Bei Datumssubtraktion mit Minuszeichen sind die Einheiten immer Tage.

Nutzungshinweise

  • Werte können beispielsweise negativ sein (-12 Tage).

Für DATEDIFF

  • DATEDIFF unterstützt Jahre, Quartale, Monate, Wochen, Tage, Stunden, Minuten und Sekunden.

  • Datum_oder_Zeit_Teil muss einer der unter Unterstützte Datums- und Zeitabschnitte aufgeführten Werte sein.

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

  • Datum_oder_Zeit_Ausdruck1 und Datum_oder_Zeit_Ausdruck2 können ein Datum, eine Uhrzeit oder ein Zeitstempel sein.

  • Wenn die zur Berechnung der Differenz verwendete Einheit eine Datumskomponente (z. B. year, month, day) oder eine Zeitkomponente (z. B. hour, minute, second) ist, werden nur die relevanten Teile verwendet.

    Beispiel:

    • year nutzt aus dem Datum nur das Jahr und ignoriert alle anderen Komponenten.

    • month nutzt aus dem Datum den Monat und das Jahr.

    • day nutzt das gesamte Datum.

    • hour nutzt aus der Zeit/dem Zeitstempel nur die Stunde und ignoriert alle anderen Komponenten.

    • minute nutzt aus der Zeit/dem Zeitstempel die Stunden und die Minuten.

    • second nutzt die gesamte Zeit/den gesamten Zeitstempel.

    Einzelheiten finden Sie unten.

Für Minuszeichen

  • Datum_oder_Zeit_Ausdruck1 und Datum_oder_Zeit_Ausdruck2 müssen beide Daten sein.

Beispiele

Berechnen der Differenz in Jahren zwischen zwei Zeitstempeln:

SELECT DATEDIFF(year, '2010-04-09 14:39:20'::TIMESTAMP, 
                      '2013-05-08 23:39:20'::TIMESTAMP) 
               AS diff_years;
+------------+
| DIFF_YEARS |
|------------|
|          3 |
+------------+

Berechnen der Differenz in Stunden zwischen zwei Zeitstempeln:

SELECT DATEDIFF(hour, '2013-05-08T23:39:20.123-07:00'::TIMESTAMP, 
    DATEADD(year, 2, ('2013-05-08T23:39:20.123-07:00')::TIMESTAMP)) 
               AS diff_hours;
+------------+
| DIFF_HOURS |
|------------|
|      17520 |
+------------+

Demonstrieren, wie Datumskomponenten DATEDIFF-Berechnungen beeinflussen und wie Minuszeichen für Datumssubtraktion verwendet wird:

SELECT column1 date_1, column2 date_2,
      DATEDIFF(year, column1, column2) diff_years,
      DATEDIFF(month, column1, column2) diff_months,
      DATEDIFF(day, column1, column2) diff_days,
      column2::DATE - column1::DATE AS diff_days_via_minus
    FROM VALUES
      ('2015-12-30', '2015-12-31'),
      ('2015-12-31', '2016-01-01'),
      ('2016-01-01', '2017-12-31'),
      ('2016-08-23', '2016-09-07');
+------------+------------+------------+-------------+-----------+---------------------+
| DATE_1     | DATE_2     | DIFF_YEARS | DIFF_MONTHS | DIFF_DAYS | DIFF_DAYS_VIA_MINUS |
|------------+------------+------------+-------------+-----------+---------------------|
| 2015-12-30 | 2015-12-31 |          0 |           0 |         1 |                   1 |
| 2015-12-31 | 2016-01-01 |          1 |           1 |         1 |                   1 |
| 2016-01-01 | 2017-12-31 |          1 |          23 |       730 |                 730 |
| 2016-08-23 | 2016-09-07 |          0 |           1 |        15 |                  15 |
+------------+------------+------------+-------------+-----------+---------------------+

Demonstrieren, wie sich Zeitkomponenten auf DATEDIFF-Berechnungen auswirken:

ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT = 'DY, DD MON YYYY HH24:MI:SS';
SELECT column1 timestamp_1, column2 timestamp_2,
      DATEDIFF(hour, column1, column2) diff_hours,
      DATEDIFF(minute, column1, column2) diff_minutes,
      DATEDIFF(second, column1, column2) diff_seconds
    FROM VALUES
      ('2016-01-01 01:59:59'::TIMESTAMP, '2016-01-01 02:00:00'::TIMESTAMP),
      ('2016-01-01 01:00:00'::TIMESTAMP, '2016-01-01 01:59:00'::TIMESTAMP),
      ('2016-01-01 01:00:59'::TIMESTAMP, '2016-01-01 02:00:00'::TIMESTAMP);
+---------------------------+---------------------------+------------+--------------+--------------+
| TIMESTAMP_1               | TIMESTAMP_2               | DIFF_HOURS | DIFF_MINUTES | DIFF_SECONDS |
|---------------------------+---------------------------+------------+--------------+--------------|
| Fri, 01 Jan 2016 01:59:59 | Fri, 01 Jan 2016 02:00:00 |          1 |            1 |            1 |
| Fri, 01 Jan 2016 01:00:00 | Fri, 01 Jan 2016 01:59:00 |          0 |           59 |         3540 |
| Fri, 01 Jan 2016 01:00:59 | Fri, 01 Jan 2016 02:00:00 |          1 |           60 |         3541 |
+---------------------------+---------------------------+------------+--------------+--------------+