2012-02-16 21 views

risposta

40

Provare ad aggiungere mesi (12 * numero di anni). Come this-

add_months(date'2010-10-10', 48) 
16

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.

6

non sono sicuro, se ho capito bene la tua domanda, ma

select add_months(someDate, numberOfYears * 12) from dual 

potrebbe fare il trucco

+0

Lavori anche per gli anni bisestili. – ScrappyDev

3

si può provare questo:

someDate + interval '4' year

INTERVAL

+0

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

+0

@ 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

2

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

Problemi correlati