Đây là một phương pháp sử dụng ADD_MONTHS
và EXTRACT(YEAR FROM ....)
. Bạn chỉ cần cộng hoặc trừ số tháng cần thiết (luôn là bội số của 12, vì bạn chỉ thay đổi năm). Không giống như TO_CHAR
/ TO_DATE
giải pháp, cách tiếp cận này xử lý các ngày nhuận (29 tháng 2). Mặt khác, hãy lưu ý rằng việc thay đổi ngày từ 28 tháng 2 năm 2003 sang năm 2012 sẽ đổi thành ngày 29 tháng 2 (ADD_MONTHS
thay đổi ngày cuối cùng của tháng thành ngày cuối cùng của tháng kết quả).
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