Return财政年度的第一天(4 月 1 日)T-SQL

Return First day of Financial Year(April 1st) T-SQL

财政年度的第一天是 4 月 1 日。

T-SQL 查询 return 4 月 1 日 getdate()

财政年度:4 月 1 日至 3 月 31 日

试试这个:

select DATEFROMPARTS(Yr, 4, 1) [start], DATEFROMPARTS(Yr + 1, 3, 31) [end] from 
(select case when DATEPART(month, getdate()) < 4 then DATEPART(year, getdate()) - 1 else DATEPART(year, getdate()) end Yr) a
declare @today  date = '2018-06-21'

select  fin_year = dateadd(month, 3, 
                           dateadd(year, 
                                   datepart(year, 
                                            dateadd(month, -3, @today)) - 1900, 0))

表达式datepart(year, dateadd(month, -3, @today))是获取当前财政年度。由于您的财政年度是 4 月 1 日,从 1 月 1 日到 3 月 31 日,从中减去 3 个月,将为您提供正确的年份(财政年度 = 财政年度)。

之后就是把4月1日和那年组成日期

DECLARE @DateToUse DATETIME = GETDATE(),
        @FinancialYearStart DATETIME
DECLARE @DayPart INT = DATEPART(DAY, @DateToUse),
        @MonthPart INT = DATEPART(MONTH, @DateToUse),
        @YearPart INT = DATEPART(YEAR, @DateToUse),
        @StartMonth INT = 4, -- April
        @StartDay INT = 1 -- 1st

SELECT DATETIMEFROMPARTS((
        @YearPart - CASE 
            WHEN @MonthPart > @StartMonth
                OR (
                    @MonthPart = @StartMonth
                    AND @DayPart >= @StartDay
                    )
                THEN 0
            ELSE 1
            END
        ), @StartMonth, @StartDay, 0, 0, 0, 0)

我刚刚把它敲了起来,它现在 2020-04-01 00:00:00.000 产生了。我在它上面添加了一些其他日期,它似乎工作得很好。显然 month/day 可以通过更改顶部的变量轻松更改。

它不是SQL中最短的块,但它很容易用于不同的日期。我在不同问题上看到的许多其他答案都返回了不同的格式,例如字符串或年份部分。而此日期时间将允许它用于日期时间比较。