【问题标题】:SQL Deriving Financial year (20XX/YY) from dd/mm/yyyy SSMS 2012SQL 从 dd/mm/yyyy SSMS 2012 派生财政年度 (20XX/YY)
【发布时间】:2019-01-28 16:14:54
【问题描述】:

我的财政年度是 01/04/20X0 到 31/03/20X1。因此,当前财政年度从 2018 年 1 月 4 日到 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)

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 在声明(n)varchar(n)char 等时,请务必确保声明长度。 IE。 nvarchar(10)。如果你不这样做,你可能会有一些“令人讨厌”的惊喜。

标签: sql sql-server date format financial


【解决方案1】:

你可以使用这个表达式:

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

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

【讨论】:

    【解决方案2】:

    今天返回'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】:
    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)
    

    【讨论】:

    • 感谢您的回复 KumarHarsh。我将使用上述解决方案,因为它不是那么重要。亲切的问候,达萨尔
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2022-01-25
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多