Hier is een benadering met behulp van ADD_MONTHS
en EXTRACT(YEAR FROM ....)
. Je telt eenvoudig het benodigde aantal maanden op of trekt er vanaf (altijd een veelvoud van 12, aangezien je alleen het jaartal verandert). In tegenstelling tot de TO_CHAR
/ TO_DATE
oplossingen, behandelt deze aanpak schrikkeldagen (29 februari). Houd er echter rekening mee dat het wijzigen van de datum van 28 februari 2003 in het jaar 2012 deze zal veranderen in 29 februari (ADD_MONTHS
verandert de laatste dag van een maand in de laatste dag van de resulterende maand).
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