我有一个存储过程,并且从c#代码将'serverdate'传递给SP.serverdate是System.Datetime.now()的值。
如何在sp中找到该serverdate的会计年度?
会计年度为“4月1日至3月31日”。
答案 0 :(得分:0)
SELECT
CASE
WHEN DATEPART(month, GETDATE()) >= 4 THEN
CAST(DATEPART(year, GETDATE()) AS VARCHAR(4)) + '-' + CAST(DATEPART(year, GETDATE())+1 AS VARCHAR(4))
ELSE
CAST(DATEPART(year, GETDATE())-1 AS VARCHAR(4)) + '-' + CAST(DATEPART(year, GETDATE()) AS VARCHAR(4))
END AS fiscal
这是你要找的那种东西吗?
答案 1 :(得分:0)
这些是Oracle查询,但是如果您从Oracle或SQL SERVER系统表(如Oracle中的“dual”)中进行选择,它们将在SQL SERVER中工作:
SELECT start_date, Add_Months(start_date-1, 12) end_date
FROM
(
SELECT Add_Months(Trunc(SYSDATE, 'YY'), 3) start_date
FROM dual
)
/
Output:
Start_Date End_Date
-------------------------
4/1/2013 3/31/2014
财政年度 - “动态”年度表:
SELECT (start_date-1)+ LEVEL Fiscal_Year
FROM
(
SELECT start_date, Add_Months(start_date-1, 12) end_date
FROM
(
SELECT Add_Months(Trunc(SYSDATE, 'YY'), 3) start_date
FROM dual
)
)
CONNECT BY LEVEL <= (end_date+1)-start_date
/
Output:
FISCAL_YEAR
------------
4/1/2013
4/2/2013
4/3/2013
....
....
3/31/2014
答案 2 :(得分:0)
如果您正在使用SYSDATE,那么:
select CASE
when substr(to_char(SYSDATE, 'ddmmyyyy'), 3, 2) IN
('01', '02', '03') THEN
substr(to_char(add_months(SYSDATE, -12), 'ddmmyyyy'), 5, 4)
else
substr(to_char(SYSDATE, 'ddmmyyyy'), 5, 4)
END
from dual;
如果您想要去任何随机日期,请更改为ddmmyyyy格式。下面是示例日期:
select case
when substr('17012014' ,3,2) in ('01','02','03') then SUBSTR(TO_CHAR(ADD_MONTHS(TO_DATE('17012014','ddmmyyyy'),-12),'ddmmyyyy'),5,4)
else
substr(to_char(to_date('17012014','ddmmyyyy'),'ddmmyyyy'),5,4)
end
from DUAL;