EDATE 在 SQL 服务器中具有可比性? -- 下一个周年日期计算
EDATE comparable in SQL Server? -- Next Anniversary Date Calculation
谁能帮我找出一个在 SQL 服务器中使用的公式,类似于下面粘贴的 Excel 公式?
=EDATE(日期,(DATEDIF(日期,TODAY(),"y")+1)*12)
我想捕捉下一个周年纪念日。
ID, Date, Next Anniversary
123, 01/12/20, 01/12/21
234, 05/25/17, 05/25/20
我掌握的信息是ID和日期。我想确定下一个周年纪念日。
如果生成的日期小于当前日期,使用 DATEADD
和 DATEDIFF
以及 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);
谁能帮我找出一个在 SQL 服务器中使用的公式,类似于下面粘贴的 Excel 公式?
=EDATE(日期,(DATEDIF(日期,TODAY(),"y")+1)*12)
我想捕捉下一个周年纪念日。
ID, Date, Next Anniversary
123, 01/12/20, 01/12/21
234, 05/25/17, 05/25/20
我掌握的信息是ID和日期。我想确定下一个周年纪念日。
如果生成的日期小于当前日期,使用 DATEADD
和 DATEDIFF
以及 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);