Funktion DATEADD - Amazon Redshift

Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting.

Funktion DATEADD

Erhöht einen DATE-, TIME-, TIMETZ- oder TIMESTAMP-Wert um ein bestimmtes Intervall.

Syntax

DATEADD( datepart, interval, {date|time|timetz|timestamp} )

Argumente

datepart

Der Datumsteil (z. B. Jahr, Monat, Tag oder Stunde), für den die Funktion gilt. Weitere Informationen finden Sie unter Datumsteile für Datums- oder Zeitstempelfunktionen.

Intervall

Eine Ganzzahl, di das Intervall angibt (z. B. eine Anzahl von Tagen), das dem Zielausdruck hinzugefügt werden soll. Bei einer negativen Ganzzahl wird das Intervall subtrahiert.

date|time|timetz|timestamp

Eine DATE-, TIME-, TIMETZ- oder TIMESTAMP-Spalte bzw. ein entsprechender Ausdruck, die/der implizit zu einem DATE, TIME, TIMETZ oder TIMESTAMP konvertiert wird. Der DATE-, TIME-, TIMETZ- oder TIMESTAMP-Ausdruck muss den angegebenen Datumsteil enthalten.

Rückgabetyp

TIMESTAMP oder TIME oder TIMEZ abhängig vom Eingabedatendatentyp.

Beispiele mit einer DATE-Spalte

Im folgenden Beispiel werden 30 Tage zu jedem Datum hinzugefügt, das in der DATE-Tabelle vorhanden ist.

select dateadd(day,30,caldate) as novplus30 from date where month='NOV' order by dateid; novplus30 --------------------- 2008-12-01 00:00:00 2008-12-02 00:00:00 2008-12-03 00:00:00 ... (30 rows)

Im folgenden Beispiel werden 18 Monate zu einem Literal-Datumswert hinzugefügt.

select dateadd(month,18,'2008-02-28'); date_add --------------------- 2009-08-28 00:00:00 (1 row)

Der Standard-Spaltenname für eine DATEADD-Funktion ist DATE_ADD. Der Standard-Zeitstempel für einen Datumswert ist 00:00:00.

Im folgenden Beispiel werden 30 Minuten zu einem Datumswert hinzugefügt, der keinen Zeitstempel angibt.

select dateadd(m,30,'2008-02-28'); date_add --------------------- 2008-02-28 00:30:00 (1 row)

Sie können Datumsteile ausschreiben oder abkürzen. In diesem Fall steht das m für Minuten, nicht für Monate.

Beispiele mit einer TIME-Spalte

Die folgende Beispieltabelle TIME_TEST enthält eine Spalte TIME_VAL (Typ TIME) mit drei eingefügten Werten.

select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00

Im folgenden Beispiel werden jedem TIME_VAL in der TIME_TEST-Tabelle 5 Minuten hinzugefügt.

select dateadd(minute,5,time_val) as minplus5 from time_test; minplus5 --------------- 20:05:00 00:05:00.5550 01:03:00

Im folgenden Beispiel werden 8 Stunden zu einem Literal-Zeitwert hinzugefügt.

select dateadd(hour, 8, time '13:24:55'); date_add --------------- 21:24:55

Das folgende Beispiel wird angezeigt, wenn eine Zeit über 24:00:00 oder unter 00:00:00 liegt.

select dateadd(hour, 12, time '13:24:55'); date_add --------------- 01:24:55

Beispiele mit einer TIMETZ-Spalte

Die Ausgabewerte in diesen Beispielen sind in der Standardzeitzone UTC angegeben.

Die folgende Beispieltabelle TIMETZ_TEST enthält eine Spalte TIMETZ_VAL (Typ TIMETZ) mit drei eingefügten Werten.

select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00

Im folgenden Beispiel werden jedem TIMETZ_VAL in der TIMETZ_TEST-Tabelle 5 Minuten hinzugefügt.

select dateadd(minute,5,timetz_val) as minplus5_tz from timetz_test; minplus5_tz --------------- 04:05:00+00 00:05:00.5550+00 06:03:00+00

Im folgenden Beispiel werden 2 Stunden zu einem Literal-Timetz-Wert hinzugefügt.

select dateadd(hour, 2, timetz '13:24:55 PST'); date_add --------------- 23:24:55+00

Beispiele mit einer TIMESTAMP-Spalte

Die Ausgabewerte in diesen Beispielen sind in der Standardzeitzone UTC angegeben.

Die folgende Beispieltabelle TIMESTAMP_TEST enthält eine Spalte TIMESTAMP_VAL (Typ TIMESTAMP) mit drei eingefügten Werten.

SELECT timestamp_val FROM timestamp_test; timestamp_val ------------------ 1988-05-15 10:23:31 2021-03-18 17:20:41 2023-06-02 18:11:12

Im folgenden Beispiel werden nur den TIMESTAMP_VAL-Werten in TIMESTAMP_TEST aus der Zeit vor dem Jahr 2000 20 Jahre hinzugefügt.

SELECT dateadd(year,20,timestamp_val) FROM timestamp_test WHERE timestamp_val < to_timestamp('2000-01-01 00:00:00', 'YYYY-MM-DD HH:MI:SS'); date_add --------------- 2008-05-15 10:23:31

Im folgenden Beispiel werden einem literalen Zeitstempelwert, der ohne Sekundenanzeige geschrieben wurde, 5 Sekunden hinzugefügt.

SELECT dateadd(second, 5, timestamp '2001-06-06'); date_add --------------- 2001-06-06 00:00:05

Nutzungshinweise

Die Funktionen DATEADD(month, ...) und ADD_MONTHS behandeln Daten am Ende von Monaten in unterschiedlicher Weise:

  • ADD_MONTHS: Wenn das Datum, das Sie hinzufügen, der letzte Tag des Monats ist, ist das Ergebnis immer der letzte Tag des Ergebnismonats, unabhängig von der Länge des Monats. Zum Beispiel: 30. April + 1 Monat = 31. Mai.

    select add_months('2008-04-30',1); add_months --------------------- 2008-05-31 00:00:00 (1 row)
  • DATEADD: Wenn das Datum, zu dem Sie hinzufügen, weniger Tage enthält als der Ergebnismonat, entspricht das Ergebnis dem Tag des Ergebnismonats, nicht dem letzten Tag des Monats. Zum Beispiel: 30. April + 1 Monat = 30. Mai.

    select dateadd(month,1,'2008-04-30'); date_add --------------------- 2008-05-30 00:00:00 (1 row)

Die Funktion DATEADD behandelt das Schaltjahrdatum 02-29 anders als DATEADD(month, 12, ...) oder DATEADD(year, 1, ...).

select dateadd(month,12,'2016-02-29'); date_add --------------------- 2017-02-28 00:00:00 select dateadd(year, 1, '2016-02-29'); date_add --------------------- 2017-03-01 00:00:00