Oracle
 sql >> Database >  >> RDS >> Oracle

Data di creazione Oracle SQL da parti

Ecco un approccio che utilizza ADD_MONTHS e EXTRACT(YEAR FROM ....) . Devi semplicemente aggiungere o sottrarre il numero di mesi necessario (sempre un multiplo di 12, poiché stai solo cambiando l'anno). A differenza di TO_CHAR / TO_DATE soluzioni, questo approccio gestisce i giorni bisestili (29 febbraio). D'altra parte, tieni presente che la modifica della data dal 28 febbraio 2003 all'anno 2012 la cambierà al 29 febbraio (ADD_MONTHS cambia l'ultimo giorno di un mese nell'ultimo giorno del mese risultante).

with
     inputs as (
       select date '2013-03-22' as effective_date,
              date '2017-08-14' as point_date
       from   dual
     )
-- end of TEST data (do not include in the solution!)
select effective_date, point_date,
       add_months(point_date, 12 * ( extract (year from effective_date) - 
                                     extract (year from point_date)     )
                 ) as mixed_date
from   inputs;

EFFECTIVE_DATE  POINT_DATE  MIXED_DATE
--------------  ----------  ----------
03/22/2013      08/14/2017  08/14/2013