Oracle
會計年度動態函式 (Oracle SQL)
我的會計年度從 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 中可能會降低)。