Kategorien:

Datums- und Uhrzeitfunktionen

TIMEADD

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

Alias für DATEADD.

Syntax

TIMEADD( <date_or_time_part> , <value> , <date_or_time_expr> )

Argumente

Datum_oder_Zeit_Teil:

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 Zeitabschnitte aufgeführten Werte sein.

Wert

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.

Datum_oder_Zeit_Ausdruck

Datum_oder_Zeit_Ausdruck 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 Datum_oder_Zeit_Teil mit der Einheit Stunden oder kleiner angegeben sein, nicht Tagen oder größer.

Wenn der Eingabedatentyp DATE ist und Datum_oder_Zeit_Teil 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 Datum_oder_Zeit_Ausdruck eine Uhrzeit ist:

  • Der Rückgabedatentyp ist eine Uhrzeit.

Wenn Datum_oder_Zeit_Ausdruck ein Zeitstempel ist:

  • Der Rückgabedatentyp ist ein Zeitstempel.

Wenn Datum_oder_Zeit_Ausdruck ein Datum ist:

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

  • Wenn Datum_oder_Zeit_Teil 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 Datum_oder_Zeit_Teil 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;

Ausgabe:

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

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');

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;

Ausgabe:

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

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;

Ausgabe:

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

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

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

Ausgabe:

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

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;

Ausgabe:

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