Calculate fiscal year in SQL Server

前端 未结 19 1439
时光说笑
时光说笑 2020-12-16 13:28

How would you calculate the fiscal year from a date field in a view in SQL Server?

相关标签:
19条回答
  • 2020-12-16 13:43

    Simplest expression for this case: YEAR(DATEADD(month, 3, Date))

    The Federal Fiscal Year

    The fiscal year is the accounting period of the federal government. It begins on October 1 and ends on September 30 of the next calendar year. Each fiscal year is identified by the calendar year in which it ends and commonly is referred to as "FY." For example, FY2003 began October 1, 2002, and ends September 30, 2003... the intent was to provide Congress with more time to process appropriations legislation, particularly to avoid continuing resolutions.

    This may not apply to other countries and areas than the US, but you just have to replace the number 3 according to your needs.

    0 讨论(0)
  • 2020-12-16 13:46
    CASE WHEN MONTH(@Date) > 10 THEN YEAR(@Date) + 1 ELSE YEAR(@Date) END
    
    0 讨论(0)
  • 2020-12-16 13:48

    I've extended the answer posted by ChrisF and Conficker.

    DECLARE @FFYStartMonth INT = 10 --The first month of the FFY
    DECLARE @EntryDate DATETIME = '4/1/2015' --The date of the data
    DECLARE @StartDate DATETIME
    
    DECLARE @EndDate DATETIME
    
    SET @StartDate = DATEADD(dd, 0,
        DATEDIFF(dd, 0,
            DATEADD(mm, - (((12 + DATEPART(m, @EntryDate)) - @FFYStartMonth)%12), @EntryDate) -
    datePart(d,DATEADD(mm, - (((12 + DATEPART(m, @EntryDate)) - @FFYStartMonth )%12),
        @EntryDate )) + 1 ))  
    
    SET @EndDate = DATEADD(SS, -1, DATEADD(mm, 12, @StartDate))
    
    SELECT @StartDate, @EndDate
    
    0 讨论(0)
  • 2020-12-16 13:52

    You would need more than a single field to do this...

    You should check your definition of fiscal year as it varies from company to company

    0 讨论(0)
  • 2020-12-16 13:55

    I suggest you use a User-Defined Function based on the Fiscal year of your application.

    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
    

    Use it like this:

    SELECT dbo.fnc_FiscalYear('9/1/2009')
    
    
    SELECT dbo.fnc_FiscalYear('8/31/2009')
    
    0 讨论(0)
  • 2020-12-16 13:56

    The simple way -

    DECLARE @DATE DATETIME = '2016/07/1'
    -- Fiscal Start SELECT CONVERT(DATETIME, (CAST(YEAR(@DATE) - IIF(MONTH(@DATE) > 6, 0, 1) AS VARCHAR) + '-7-1'))

    -- Fiscal End SELECT CONVERT(DATETIME, (CAST(YEAR(@DATE) + IIF(MONTH(@DATE) > 6, 1, 0) AS VARCHAR) + '-6-30'))

    0 讨论(0)
提交回复
热议问题