【问题标题】:EDATE comparable in SQL Server? -- Next Anniversary Date CalculationEDATE 在 SQL Server 中可比? -- 下一个周年日期计算
【发布时间】:2020-02-24 15:49:05
【问题描述】:

谁能帮我找出一个在 SQL Server 中使用的公式,类似于下面粘贴的 Excel 公式?

=EDATE(date,(DATEDIF(date,TODAY(),"y")+1)*12)

我想捕捉下一个周年纪念日。

ID, Date, Next Anniversary
123, 01/12/20, 01/12/21
234, 05/25/17, 05/25/20

我拥有的信息是 ID 和日期。我想确定下一个周年纪念日。

【问题讨论】:

  • 请提供样本数据和期望的结果。不要让人们猜测你想要做什么。
  • “周年纪念日”是什么意思?不就是日期+1年吗?
  • 很抱歉。已更新。
  • @larnu 是的。但是 2017 年 5 月 25 日的日期呢?下一个周年纪念日是 05/25/20(不是 05/25/18)。
  • 那么您实际描述的是当前日期之后的下一个日期,它共享相同的月份和日期?

标签: sql ssms datediff


【解决方案1】:

如果生成日期小于当前日期,您似乎可以使用DATEADDDATEDIFF 以及CASE 表达式相当轻松地实现这一点:

SELECT YourDate,
       CASE WHEN V.NextDate < CONVERT(date,GETDATE()) THEN DATEADD(YEAR, 1, V.NextDate) ELSE V.NextDate END AS NextDate
FROM (VALUES(CONVERT(date,'20190101')), --This would actually be your table
            (CONVERT(date,'20170709')),
            (CONVERT(date,'20160229')), --Leap year
            (CONVERT(date,'20181219')))YT(YourDate)
     CROSS APPLY (VALUES(DATEADD(YEAR, DATEDIFF(YEAR, YT.YourDate, GETDATE()),YT.YourDate)))V(NextDate);

【讨论】:

    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多