TRUNC () может быть с пользой применен к датам с разными форматными масками. Наиболее уместно, trunc(sysdate, 'yyyy')
дает нам первый день года. Так что это даст нам 01 апреля текущего года ...
add_months(trunc(sysdate, 'yyyy'), 3)
а это та дата за предыдущий год ...
add_months(trunc(add_months(sysdate, -12), 'yyyy'), 3)
Итак:
CREATE OR REPLACE VIEW FISCAL_YEAR_VW AS
WITH cte as
( select add_months(trunc(sysdate, 'yyyy'), 3) as this_year
, add_months(trunc(add_months(sysdate, -12), 'yyyy'), 3) as last_year
from dual )
SELECT
CASE
WHEN SYSDATE >= cte.this_year THEN
cte.this_year
ELSE
cte.last_year
END AS fiscal_year
FROM
cte;
caveat: у меня еще не было возможности протестировать этот код, поэтому он может содержать опечатки. Я проверю это позже и исправлю это при необходимости.