Kategorien:

Datums- und Uhrzeitfunktionen

DATEADD

Fügt den angegebenen Wert für die angegebene Datums- oder Uhrzeitkomponente zu einem Datum, einer Uhrzeit oder einem Zeitstempel hinzu.

Aliasse:

TIMEADD , TIMESTAMPADD

Siehe auch:

ADD_MONTHS

Syntax

DATEADD( <date_or_time_part>, <value>, <date_or_time_expr> )
Copy

Argumente

date_or_time_part

Hiermit wird die Einheit für die Uhrzeit angegeben, die Sie hinzufügen möchten. Wenn Sie beispielsweise 2 Tage hinzufügen möchten, lautet die Einheit DAY. Diese Einheit muss einer der in Unterstützte Datums- und Uhrzeitkomponenten aufgeführten Werte sein.

value

Dies ist die Anzahl der Zeiteinheiten, die Sie hinzufügen möchten. Wenn Sie beispielsweise 2 Tage hinzufügen möchten, muss der Wert 2 lauten.

date_or_time_expr

date_or_time_expr muss ein Datum, eine Uhrzeit oder einen Zeitstempel ergeben. Dies ist das Datum, die Uhrzeit oder der Zeitstempel, dem bzw. der Sie hinzufügen möchten. Wenn Sie zum Beispiel dem 1. August 2018 zwei Tage hinzufügen möchten, muss der Wert '2018-08-01'::DATE lauten.

Wenn der Datentyp TIME ist, muss date_or_time_part mit der Einheit Stunden oder kleiner angegeben sein, nicht Tagen oder größer.

Wenn der Eingabedatentyp DATE ist und date_or_time_part Stunden oder kleiner ist, wird der Eingabewert nicht abgelehnt, sondern als TIMESTAMP mit Stunden, Minuten, Sekunden und Bruchteile einer Sekunde behandelt, die anfänglich auf 0 gesetzt wurden (z. B. Mitternacht am angegebenen Datum).

Rückgabewerte

Wenn date_or_time_expr eine Uhrzeit ist:

  • Der Rückgabedatentyp ist eine Uhrzeit.

Wenn date_or_time_expr ein Zeitstempel ist:

  • Der Rückgabedatentyp ist ein Zeitstempel.

Wenn date_or_time_expr ein Datum ist:

  • Wenn date_or_time_part größer gleich day ist (z. B. month, year), gibt die Funktion einen DATE-Wert zurück.

  • Wenn date_or_time_part kleiner als ein Tag ist (z. B. hour, minute, second), gibt die Funktion für das Datum einen TIMESTAMP_NTZ-Wert mit der Startzeit 00:00:00,000 zurück.

Nutzungshinweise

  • Wenn date_or_time_part year, quarter oder month (oder eine Variante) ist und der resultierende Monat weniger Tage hat als der ursprüngliche Tag des Monats, kann der resultierende Tag des Monats vom ursprünglichen Tag abweichen.

Beispiele

Hinzufügen von Jahren zu einem Datum:

SELECT TO_DATE('2013-05-08') AS v1, DATEADD(year, 2, TO_DATE('2013-05-08')) AS v;
Copy

Ausgabe:

+------------+------------+
| V1         | V          |
|------------+------------|
| 2013-05-08 | 2015-05-08 |
+------------+------------+
Copy

Hinzufügen von 2 Jahren und 2 Stunden zu einem Datum:

Ursprüngliche Einrichtung dieses Beispiels und daraus folgende Beispiele:

ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF9';
CREATE TABLE datetest (d date);
INSERT INTO datetest VALUES ('2013-04-05');
Copy

Abfragen zum Hinzufügen von 2 Jahren und 2 Stunden zu einem Datum:

SELECT d AS "DATE", dateadd(year, 2, d) AS add_2_years, 
    dateadd(hour, 2, d) AS add_2_hours
  FROM datetest;
Copy

Ausgabe:

+------------+-------------+-------------------------+
| DATE       | ADD_2_YEARS | ADD_2_HOURS             |
|------------+-------------+-------------------------|
| 2013-04-05 | 2015-04-05  | 2013-04-05 02:00:00.000 |
+------------+-------------+-------------------------+
Copy

Hinzufügen von Stunden zu einem Zeitstempel:

SELECT TO_TIMESTAMP_LTZ('2013-05-08 11:22:33.444') AS v1,
  DATEADD(HOUR, 2, TO_TIMESTAMP_LTZ('2013-05-08 11:22:33.444')) AS v;
Copy

Ausgabe:

+-------------------------------+-------------------------------+
| V1                            | V                             |
|-------------------------------+-------------------------------|
| 2013-05-08 11:22:33.444000000 | 2013-05-08 13:22:33.444000000 |
+-------------------------------+-------------------------------+
Copy

Hinzufügen eines Monats zu einem Datum in einem Monat mit gleich vielen oder mehr Tagen als der resultierende Monat. Beispiel: Wenn heute der 31. Januar wäre, sollte bei Hinzufügen eines Monats nicht der „31. Februar“ zurückgegeben werden.

SELECT DATEADD(MONTH, 1, '2000-01-31'::DATE) AS DIFFERENT_DAY;
Copy

Ausgabe:

+---------------+
| DIFFERENT_DAY |
|---------------|
| 2000-02-29    |
+---------------+
Copy

Hinzufügen eines Monats zu einem Datum in einem Monat mit weniger Tagen als der resultierende Monat. Durch Hinzufügen eines Monats zum 29. Februar sollte sich der 29. März ergeben, was sicher ist.

SELECT DATEADD(MONTH, 1, '2000-02-29'::DATE) AS RESULT;
Copy

Ausgabe:

+------------+
| RESULT     |
|------------|
| 2000-03-29 |
+------------+
Copy