- Kategorien:
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:
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
undDatum_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 WertDatum_oder_Zeit_Ausdruck1
wird vonDatum_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 Wertweek
(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
undDatum_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
undDatum_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 | +---------------------------+---------------------------+------------+--------------+--------------+