SQL 从 dd/mm/yyyy SSMS 2012 导出财政年度 (20XX/YY)

SQL Deriving Financial year (20XX/YY) from dd/mm/yyyy SSMS 2012

我的财政年度是 01/04/20X0 到 31/03/20X1。因此,当前财政年度是从 01/04/2018 到 31/03/2019。缩写为“20X0/X1”或“2018/19”。

我的输出日期是 01/08/2021,并且始终采用 dd/mm/yyyy 格式。这对应财政年度“2021/22”

我需要帮助从我的日期或 dd/mm/yyyy.

格式的任何给定日期推导出 return 财政年度的万无一失的公式

我不想使用 Case 语句,因为会有多个 band,而且看起来效率不高。

这是我目前正在使用的,但有问题

CAST(YEAR(DATEADD(month, 9, ISNULL(msdate5.[Completion - Revised], msdate5.[Completion - Original])))-1 as nvarchar) + '/' + CAST(YEAR(DATEADD(month, 9, ISNULL( msdate5.[Completion - Revised],  msdate5.[Completion - Original]))) as nvarchar)

您可以使用这个表达式:

select (datename(year, dateadd(month, -3, @mydate)) + '/' +
        datename(year, dateadd(month, -3 + 12, @mydate))
       )

这会将日期偏移三个月并提取年份。请注意 datename() 的使用,这样您就不必费心将任何内容转换为字符串。

今天,这个 returns '2018/19'。对于这样的事情,最简单的方法之一是将财政年度与日历年对齐,然后从那里开始工作:

DECLARE @Date date = GETDATE();

SELECT CONVERT(varchar(4),DATEPART(YEAR, DATEADD(MONTH, -3, @Date))) + '/' + RIGHT(DATEPART(YEAR, DATEADD(MONTH, -3, @Date)) +1,2);
DECLARE @mydate VARCHAR(20) = '01/08/2021'

SELECT cast(datepart(year, @mydate) AS VARCHAR(4)) + '/' + cast((datepart(year, @mydate) + 1) AS VARCHAR(4))

SELECT cast(cast(datepart(year, @mydate) AS VARCHAR(4)) + '/' + '04' + '/' + '01' AS DATETIME)
    ,cast(cast((datepart(year, @mydate) + 1) AS VARCHAR(4)) + '/' + '03' + '/' + '31' AS DATETIME)