在SQL Server中计算会计年度

R0b*_*n1k 16 sql-server accounting

您如何从SQL Server视图中的日期字段计算会计年度?

Bre*_*tra 19

我建议您根据应用程序的会计年度使用用户定义的函数.

CREATE FUNCTION dbo.fnc_FiscalYear(
    @AsOf           DATETIME
)
RETURNS INT
AS
BEGIN

    DECLARE @Answer     INT

    -- You define what you want here (September being your changeover month)
    IF ( MONTH(@AsOf) < 9 )
        SET @Answer = YEAR(@AsOf) - 1
    ELSE
        SET @Answer = YEAR(@AsOf)


    RETURN @Answer

END



GO
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

SELECT dbo.fnc_FiscalYear('9/1/2009')


SELECT dbo.fnc_FiscalYear('8/31/2009')
Run Code Online (Sandbox Code Playgroud)


R0b*_*n1k 10

CASE WHEN MONTH(@Date) > 10 THEN YEAR(@Date) + 1 ELSE YEAR(@Date) END
Run Code Online (Sandbox Code Playgroud)

  • 在美国可能就是这种情况 - 但世界并没有在美国边境结束...... (4认同)
  • 等价于:YEAR(DATEADD(month, 3, Date)) (3认同)
  • 我不知道为什么人们会被这个数字 10 绊倒。如果需要,可以将其替换为所需的数字。 (2认同)

小智 10

这是澳大利亚财政年度的开始日期代码

 select DATEADD(dd,0, DATEDIFF(dd,0, DATEADD( mm,
 -(((12 + DATEPART(m, getDate())) - 7)%12), getDate() ) 
 - datePart(d,DATEADD( mm, -(((12 + DATEPART(m, getDate())) - 7)%12),getDate() ))+1 ) )
Run Code Online (Sandbox Code Playgroud)

它返回就像 '2012-07-01 00:00:00.000'


小智 6

CASE 
  WHEN MONTH(Date) > 6 
   THEN YEAR(Date) + 1
   ELSE YEAR(Date)
  END AS [FISCAL YEAR]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,会计年度从7/1开始.这是最简单的解决方案.