Ho un campo della dataOracle Data - Come aggiungere anni alla data di
DATE = 10/10/2010
somma = 4 (questo sono certo numero di anni di calcolo)
c'è un modo per aggiungere quattro anni per 10/10/2010 e renderlo 10/10/2014?
Ho un campo della dataOracle Data - Come aggiungere anni alla data di
DATE = 10/10/2010
somma = 4 (questo sono certo numero di anni di calcolo)
c'è un modo per aggiungere quattro anni per 10/10/2010 e renderlo 10/10/2014?
Provare ad aggiungere mesi (12 * numero di anni). Come this-
add_months(date'2010-10-10', 48)
Utilizzare add_months
Esempio:
SELECT add_months(to_date('10-OCT-2010'), 48) FROM DUAL;
Attenzione
add_months, restituisce l'ultimo giorno del mese risultante se si introduce l'ultimo giorno di un mese a iniziare con.
Quindi add_months(to_date('28-feb-2011'),12)
restituirà 29-feb-2012 come risultato.
Credo che si possa usare la funzione ADD_MONTHS()
. 4 anni è di 48 mesi, in modo da:
add_months(DATE,48)
ecco alcune informazioni sull'utilizzo della funzione:
http://www.techonthenet.com/oracle/functions/add_months.php
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1157035034361
non sono sicuro, se ho capito bene la tua domanda, ma
select add_months(someDate, numberOfYears * 12) from dual
potrebbe fare il trucco
Solo una raccomandazione. Evitare l'uso del tipo di dati INTERVAL. È conforme ANSI/ISO. Pertanto la dichiarazione che hai scritto non funzionerà per il 29 febbraio. In genere spetta a te garantire che il risultato sarà corretto. Add_months è proprietario di Oracle e genera date valide per i casi. – ibre5041
@ ibre5041 Mi spiace sollevare questo post dalla tomba, ma stavo cercando un modo per farlo senza averlo attaccato all'ultimo giorno del mese quando calcolai compleanni perché add_month() fallisce per 2/28. Quando l'anno successivo è un anno bisestile add_months (to_date ('02 -28 ',' MM-DD ')) restituisce 02-29, che non è corretto.Ho trovato che il seguente comando restituisce sempre la data corretta: (to_date ('02 -28 ',' MM-DD ') - 1) + intervallo' 1 'anno + 1 restituisce 02-28, anche se l'anno successivo è un salto anno, e se inserisci 02-29, restituirà 03-01 negli anni non bisestili. – Bob
Un'altra opzione a parte ADD_MONTHS
SELECT
SYSDATE,
SYSDATE
+ TO_YMINTERVAL ('1-0')
FROM
DUAL;
SYSDATE SYSDATE+TO_YMINTERVAL('1-0')
--------- ----------------------------
29-OCT-13 29-OCT-14
1 row selected.
SELECT
SYSDATE,
SYSDATE
+ TO_YMINTERVAL ('2-0')
FROM
DUAL;
SYSDATE SYSDATE+TO_YMINTERVAL('2-0')
--------- ----------------------------
29-OCT-13 29-OCT-15
1 row selected.
SELECT
TO_DATE ('29-FEB-2004',
'DD-MON-YYYY')
+ TO_YMINTERVAL ('1-0')
FROM
DUAL
*
Error at line 4
ORA-01839: date not valid for month specified
Ma l'ultimo è illegale poiché non v'è nessun giorno 29 Febbraio nel 2005, quindi fallisce in casi bisestili (29 febbraio)
Leggi lo documentation per lo stesso
Lavori anche per gli anni bisestili. – ScrappyDev