Her er en tilgang, der bruger ADD_MONTHS
og EXTRACT(YEAR FROM ....)
. Du tilføjer eller trækker blot det nødvendige antal måneder (altid et multiplum af 12, da du kun ændrer året). I modsætning til TO_CHAR
/ TO_DATE
løsninger, håndterer denne tilgang skuddage (29. februar). På den anden side skal du være opmærksom på, at ændring af datoen fra 28. februar 2003 til år 2012 vil ændre den til 29. februar (ADD_MONTHS
ændrer den sidste dag i en måned til den sidste dag i den resulterende måned).
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