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 DATE_ADD
Incrementa un valore di DATE, TIME, TIMETZ o TIMESTAMP dell'intervallo specificato.
Sintassi
DATE_ADD( datepart, interval )
Argomenti
- datepart
-
La parte di data (ad esempio, anno, mese o giorno) su cui la funzione opera. Per ulteriori informazioni, consulta 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.
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 date_add(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 date_add(month,18,'2008-02-28'); date_add --------------------- 2009-08-28 00:00:00 (1 row)
Il nome di colonna predefinito per una funzione DATE_ADD è 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 date_add(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 date_add(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 date_add(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 date_add(hour, 12, time '13:24:55'); date_add --------------- 01:24:55
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 date_add(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 date_add(second, 5, timestamp '2001-06-06'); date_add --------------- 2001-06-06 00:00:05
Note per l'utilizzo
Le funzioni DATE_ADD (month,...) e ADD_MONTHS gestiscono le date che cadono alla fine dei mesi in modo diverso:
-
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)
-
DATE_ADD: se ci sono meno giorni nella data a cui stai aggiungendo rispetto al mese dei risultati, il risultato è il giorno corrispondente del mese dei risultati, non l'ultimo giorno di quel mese. Ad esempio, 30 aprile + 1 mese è il 30 maggio.
select date_add(month,1,'2008-04-30'); date_add --------------------- 2008-05-30 00:00:00 (1 row)
La funzione DATE_ADD gestisce la data dell'anno bisestile 02-29 in modo diverso quando si utilizza date_add (month, 12,...) o date_add (year, 1,...).
select date_add(month,12,'2016-02-29'); date_add --------------------- 2017-02-28 00:00:00 select date_add(year, 1, '2016-02-29'); date_add --------------------- 2017-03-01 00:00:00