代码之家  ›  专栏  ›  技术社区  ›  Dasal Kalubowila

从2012年年月日SSMS开始计算财政年度(20XX/YY)的SQL

  •  1
  • Dasal Kalubowila  · 技术社区  · 7 年前

    我的财政年度是从20X0年4月1日到20X1年3月31日。因此,本财政年度为2018年4月1日至2019年3月31日。缩写为“20X0/X1”或“2018/19”。

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

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

    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)
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Gordon Linoff    7 年前

    可以使用以下表达式:

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

    这将日期偏移三个月,并提取年份。注意使用 datename() 所以你不必费心把任何东西转换成字符串。

        2
  •  0
  •   sticky bit    7 年前

    今天,这个又回来了 '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);
    
        3
  •  0
  •   KumarHarsh    7 年前
    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)