Oracle

會計年度動態函式 (Oracle SQL)

  • February 6, 2020

我的會計年度從 10 月 1 日(2017 年)開始,到 9 月 30 日(2018 年)結束

我想寫一個函式來動態計算十月的第一天。

目前我有:

select Add_Months(Trunc(Add_Months(sysdate,3),'YYYY'), -3) from dual

很多方法可以做到這一點。但這裡有一個:

-- should be 2012
SELECT   (EXTRACT (YEAR FROM ADD_MONTHS (DATE '2013-09-30', -9))||'-10-01') from dual;

-- should be 2013
SELECT   (EXTRACT (YEAR FROM ADD_MONTHS (DATE '2013-10-01', -9))||'-10-01') from dual;

-- should be 2018
SELECT   (EXTRACT (YEAR FROM ADD_MONTHS (SYSDATE, -9))||'-10-01') from dual;

只需要一個TO_DATE().

小提琴連結

create or replace function fiscal_year_start_date(p_date date) return date
as
 pragma udf;
begin
 return add_months(trunc(add_months(p_date,3),'YYYY'), -3);
end;
/

alter session set nls_date_format='YYYY-MM-DD';

select fiscal_year_start_date(date'2016-01-01') from dual;

FISCAL_YEA
----------
2015-10-01

pragma_udf是可選的,它是一個 12c 特性,當在普通 SQL 中使用時,它可以稍微提高此類使用者定義函式的性能(但在 PL/SQL 中可能會降低)。

引用自:https://dba.stackexchange.com/questions/222642