Funzione DATEADD - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Funzione DATEADD

Incrementa un valore di DATE, TIME, TIMETZ o TIMESTAMP dell'intervallo specificato.

Sintassi

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

Argomenti

datepart

La parte di data (ad esempio, anno, mese o giorno) su cui la funzione opera. Per ulteriori informazioni, consultare Parti di data per funzioni di data e timestamp.

intervallo

Un intero che specifica l'intervallo (ad esempio, il numero di giorni) da aggiungere all'espressione target. Un intero negativo sottrae l'intervallo.

date|time|timetz|timestamp

Una colonna o un'espressione DATE, TIME, TIMETZ, or TIMESTAMP che viene implicitamente convertita in un DATE, TIME, TIMETZ o TIMESTAMP. L'espressione DATE, TIME, TIMETZ o TIMESTAMP deve contenere la parte di data specificata.

Tipo restituito

TIMESTAMP o TIME o TIMETZ a seconda del tipo di dati di input.

Esempi con una colonna DATE

Nel seguente esempio vengono aggiunti 30 giorni a ogni data di novembre presente nella tabella DATE.

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)

L'esempio seguente aggiunge 18 mesi a un valore di data letterale.

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

Il nome di colonna predefinito per una funzione DATEADD è DATE_ADD. Il timestamp predefinito per un valore di data è 00:00:00.

Nell'esempio seguente vengono aggiunti 30 minuti a un valore di data che non specifica un timestamp.

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

È possibile assegnare un nome completo o abbreviato alle parti di data. In questo caso, m sta per minuti, non mesi.

Esempi con una colonna TIME

La tabella di esempio seguente TIME_TEST contiene una colonna TIME_VAL (tipo TIME) con tre valori inseriti.

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

Nell'esempio seguente vengono aggiunti 5 minuti a ogni TIME_VAL della tabella TIME_TEST.

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

Nell'esempio seguente vengono aggiunte 8 ore a un valore di tempo letterale.

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

L'esempio seguente mostra quando un tempo va oltre 24:00:00 o è precedente a 00:00:00.

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

Esempi con una colonna TIMETZ

I valori di output in questi esempi sono in UTC che è il fuso orario predefinito.

La tabella di esempio seguente TIMETZ_TEST contiene una colonna TIMETZ_VAL (tipo TIMETZ) con tre valori inseriti.

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

Nell'esempio seguente vengono aggiunti 5 minuti a ogni TIMETZ_VAL nella tabella TIMETZ_TEST.

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

Nell'esempio seguente vengono aggiunte 2 ore a un valore timetz letterale.

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

Esempi con una colonna TIMESTAMP

I valori di output in questi esempi sono in UTC che è il fuso orario predefinito.

La tabella di esempio seguente TIMESTAMP_TEST ha una colonna TIMESTAMP_VAL (tipo TIMESTAMP) con tre valori inseriti.

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

L'esempio seguente aggiunge solo 20 anni ai valori TIMESTAMP_VAL in TIMESTAMP_TEST prima del 2000.

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

L'esempio seguente aggiunge 5 secondi a un valore di timestamp letterale scritto senza un indicatore dei secondi.

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

Note per l'utilizzo

Le funzioni DATEADD(month, ...) e ADD_MONTHS gestiscono differentemente le date che cadono alla fine del mese.

  • ADD_MONTHS: se la data che stai aggiungendo è l'ultimo giorno del mese, il risultato è sempre l'ultimo giorno del mese risultante, indipendentemente dalla lunghezza del mese. Ad esempio, 30 aprile + 1 mese è il 31 maggio.

    select add_months('2008-04-30',1); add_months --------------------- 2008-05-31 00:00:00 (1 row)
  • DATEADD: se vi sono meno giorni nella data che stai aggiungendo rispetto al mese del risultato, il risultato sarà il giorno corrispondente del mese risultante, non l'ultimo giorno di quel mese. Ad esempio, 30 aprile + 1 mese è il 30 maggio.

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

La funzione DATEADD gestisce la data 29/02 dell'anno bisestile differentemente a seconda se si utilizza dateadd(month, 12,…) o 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