0

我有一个存储过程,从 c# 代码中将“serverdate”传递给 SP.serverdate 是 System.Datetime.now() 的值。

如何从 sp 中的 serverdate 中找到财政年度?

会计年度取为“4 月 1 日至 3 月 31 日”。

4

3 回答 3

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

这就是你要找的东西吗?

于 2013-01-22T12:33:09.773 回答
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; 
于 2013-06-18T04:06:12.017 回答
0

这些是 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
于 2013-01-22T13:12:58.517 回答