Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql select语句中计算会计年度?_Sql_Sql Server_Tsql - Fatal编程技术网

在sql select语句中计算会计年度?

在sql select语句中计算会计年度?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个需要以会计年度格式返回的日期字段。范例 Start_Date Year 04/01/2012 - 2013 01/01/2012 - 2012 09/15/2013 - 2014 04/01/2013 to 03/31/2014 is FY 2014 我们需要计算 04/01/2012 to 03/31/2013 is FY 2013 04/01/2013 to 03/31/2014 is FY 2014 及 04/01/2013 t

我有一个需要以会计年度格式返回的日期字段。范例

Start_Date        Year 
04/01/2012 -      2013
01/01/2012 -      2012
09/15/2013 -      2014
04/01/2013 to 03/31/2014 is FY 2014
我们需要计算

04/01/2012 to 03/31/2013 is FY 2013
04/01/2013 to 03/31/2014 is FY 2014

04/01/2013 to 03/31/2014 is FY 2014

我们如何在select语句中做到这一点?

David有一个很好的解决方案。一个更简单的表达式是:

04/01/2013 to 03/31/2014 is FY 2014
SELECT CASE WHEN DatePart(Month, Start_Date) >= 4
            THEN DatePart(Year, Start_Date) + 1
            ELSE DatePart(Year, Start_Date)
       END AS Fiscal_Year
FROM data
select year(dateadd(month, -3, start_date)) as FiscalYear
也就是说,减去3个月,取一年

04/01/2013 to 03/31/2014 is FY 2014
编辑:

04/01/2013 to 03/31/2014 is FY 2014
正如评论中所指出的,这似乎提前了一年。以下是两种解决方案:

04/01/2013 to 03/31/2014 is FY 2014
select year(dateadd(month, 9, start_date)) as FiscalYear

select 1 + year(dateadd(month, -3, start_date)) as FiscalYear

假设您有一个每年开始日期为的会计年度表,并且您希望查找给定日期@日期的会计年度:

04/01/2013 to 03/31/2014 is FY 2014
SELECT MIN(Year) WHERE @Date >= Start_Date FROM Fiscal_Year

我只是选择这样做。这很简单,你可以用任何你想要的财政年度结束日期替换09,30。不过,我不确定这在SQL Server以外的任何系统中是否有效

04/01/2013 to 03/31/2014 is FY 2014
CASE 
    WHEN CAST(GETDATE() AS DATE) > 
         SMALLDATETIMEFROMPARTS(DATEPART(YEAR,GETDATE()),09,30,00,000) 
    THEN 
        DATEPART(YEAR,GETDATE()) + 1 ELSE DATEPART(YEAR,GETDATE()) 
    END AS FY
…简单一点:

04/01/2013 to 03/31/2014 is FY 2014
YEARDATEADDMonth,-DATEPARTMonth,[Date]+5%12,[Date]+作为财政年度

04/01/2013 to 03/31/2014 is FY 2014
declare @Date smalldatetime, @FiscalYearStartMonth tinyint
set @Date = GETDATE();
set @FiscalYearStartMonth = 1; -- Jan

print convert(varchar(4), 
case when MONTH(@Date) < @FiscalYearStartMonth 
then YEAR(@Date) -1 
else YEAR(@Date) end)
假设@Date是您的[Start_Date]字段,您可以:

04/01/2013 to 03/31/2014 is FY 2014
select * from yourTable 
group by convert(varchar(4), 
case when MONTH([Start_Date]) < @FiscalYearStartMonth 
then YEAR([Start_Date]) -1 
else YEAR([Start_Date]) end)

希望这能有所帮助

这是甲骨文当前财政年度的情况。输入要在sysdate中查找会计年度的日期

04/01/2013 to 03/31/2014 is FY 2014
 SELECT '01-APR-'
 ||TO_CHAR((add_months(**sysdate**,-3)),'YYYY') FIN_YEAR_START_DATE,
 '31-MAR-'
 ||(TO_CHAR((add_months(**sysdate**,-3)),'YYYY')+1) FIN_YEAR_END_DATE
 FROM dual;

仅对于2020财年的年度格式,请使用以下查询:

04/01/2013 to 03/31/2014 is FY 2014
SELECT tender_opening_date,CASE WHEN MONTH( order_date) >= 4
            THEN CONCAT('FY ',YEAR(( order_date)) +1  )
            ELSE CONCAT('FY ',YEAR( order_date)-1   )
       END AS Fiscal_Year
FROM orders_tbl
SELECT tender_opening_date,CASE WHEN MONTH( order_date) >= 4
                THEN CONCAT('FY ',YEAR( order_date),'-',DATE_FORMAT( order_date,'%y') +1  )
                ELSE CONCAT('FY ',YEAR( order_date)-1,'-',DATE_FORMAT( order_date,'%y')   )
           END AS Fiscal_Year
    FROM orders_tbl
对于2019-20财年的整个财政年度,使用以下查询:

04/01/2013 to 03/31/2014 is FY 2014
SELECT tender_opening_date,CASE WHEN MONTH( order_date) >= 4
            THEN CONCAT('FY ',YEAR(( order_date)) +1  )
            ELSE CONCAT('FY ',YEAR( order_date)-1   )
       END AS Fiscal_Year
FROM orders_tbl
SELECT tender_opening_date,CASE WHEN MONTH( order_date) >= 4
                THEN CONCAT('FY ',YEAR( order_date),'-',DATE_FORMAT( order_date,'%y') +1  )
                ELSE CONCAT('FY ',YEAR( order_date)-1,'-',DATE_FORMAT( order_date,'%y')   )
           END AS Fiscal_Year
    FROM orders_tbl

那么您需要结束日期?您的输入数据是否与上面示例中的输出一致?我认为输入是错误的。我认为这比CASE-WHEN-THEN-ELSE更简单,但在这个特定示例中,您希望添加9个月。如果你加上9个月,四月将被提前到明年的一月。有点代码高尔菲,但是如果你让你的第一组<4,并把+1放在其他组下,你会失去一个代码字符。YEAR[date]是DatePartYear的缩写,[date]为-DATEPARTMonth,[date]+5%12对于任何月份小于7的[date]都将产生0,而对于所有其他月份,该函数看起来应该返回当前日期的年份,或者如果日期在下半年,则返回早一个月的年份。它将始终返回与年[日期]相同的内容,假设末尾的“+”只是一个输入错误。。。你是说YEARDATEADDYear,DATEPARTMonth,[Date]+5%12,[Date]——如果前面的五个月在12月之内或之后,那么加上一年?值得注意的是,这个问题也在寻找从4月份开始的财政年度。。。