SQL 派生财政年度 (20XX/YY) 来自 dd/mm/yyyy SSMS 2012



我的财政年度是 01/04/20X0 到 31/03/20X1。因此,当前财政年度从 2018 年 4 月 1 日至 2019 年 3 月 31 日。缩写为"20X0/X1"或"2018/19"。

我的输出日期是 01/08/2021,格式始终为 dd/mm/yyyy。这相当于财政年度"2021/22">

我需要帮助推导出一个万无一失的公式,以从我的日期或格式为 dd/mm/yyyy 的任何给定日期返回财政年度。

我不想使用 Case 语句,因为会有几个波段并且似乎效率不高。

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

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()的使用,因此您不必费心将任何内容转换为字符串。

对于今天,这返回'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)

最新更新