有没有办法从日期(2013年7月24日)开始,以短暂的方式找出当前财政年度(2013-2014)。
我试过这个
select extract(year from report_date)||' - '||
extract(year from report_date) + 1 year
from bdpr_swtch_yrd
除此之外,如果我能找到,所选日期属于哪个季度。
答案 0 :(得分:4)
由于存在3个月的偏差,您应该从当前日期减去3个月,然后提取年份。
SELECT EXTRACT (YEAR FROM ADD_MONTHS (SYSDATE, -3))
|| '-'
|| EXTRACT (YEAR FROM ADD_MONTHS (SYSDATE, 9))
FROM DUAL;
输出:2013-2014
SELECT EXTRACT (YEAR FROM ADD_MONTHS (DATE '2013-03-31', -3))
|| '-'
|| EXTRACT (YEAR FROM ADD_MONTHS (DATE '2013-03-31', 9))
FROM DUAL;
输出:2012-2013
修改强>
要查找本财政年度的所有记录,首先需要查找财政年度的开始和结束日期,即4月1日和3月31日。有几种方法可以实现这一点。我将继续采用与上述相同的方法,因为我们已经有了这一年。
Start_date:= to_date('01-04-'||EXTRACT (YEAR FROM ADD_MONTHS (reference_date, -3)),'dd-mm-yyyy')
End_date := to_date('01-04-'||EXTRACT (YEAR FROM ADD_MONTHS (reference_date, 9)),'dd-mm-yyyy')
所以,你的where子句看起来应该是这样的。
select * from table_name
where column_name between Start_date and End_date;
答案 1 :(得分:1)
鉴于您的会计年度将于3月31日结束,这应基于当前日期返回会计年度:
SELECT
EXTRACT(YEAR FROM sysdate) + DECODE(SIGN(TO_CHAR(sysdate, 'MM') - 3), -1, 0, 1)
AS FISCAL_YEAR
FROM DUAL
这应该返回当前日期的四分之一:
SELECT to_char(sysdate, 'Q')
FROM DUAL
答案 2 :(得分:1)
SELECT CASE
WHEN TO_CHAR (indate, 'MMdd') > '0331'
THEN to_char(indate,'yyyy')
ELSE to_char(to_number(to_char(indate,'yyyy'))-1)
END AS FY
FROM DUAL;
对于其他格式:
select FY||'-'||(FY+1) as FY,FY||'-'||substr((FY+1),3,2) as FYN from (
SELECT CASE
WHEN TO_CHAR (sysdate, 'MMdd') > '0331'
THEN to_char(sysdate,'yyyy')
ELSE to_char(to_number(to_char(sysdate,'yyyy'))-1)
END AS FY
FROM DUAL);
答案 3 :(得分:1)
SELECT SYSDATE,CASE
WHEN TO_CHAR (SYSDATE, 'MMdd') > '0331'
THEN to_char(SYSDATE,'yyyy')||'-'||to_char(to_number(to_char(SYSDATE,'yyyy'))+1)
ELSE to_char(to_number(to_char(SYSDATE,'yyyy'))-1)||'-'||to_char(SYSDATE,'yyyy')
-- to_char(to_number(to_char(SYSDATE,'yyyy'))-1)
END AS FY
FROM DUAL;
试试这个,希望这有帮助
答案 4 :(得分:1)
对于许多人来说,会计年度从10月开始,其抵消额为+3。借用诺埃尔的代码:
摘录(年份来自add_months(日期' 2013-10-15',3)) 要么 extract(来自add_months(sysdate,3)的年份)
此代码给出了任何给定日期的会计年度。然后你可以使用+1或-1年或复制代码来专门做你想要的。