EDATE сопоставимы в SQL Сервер? - Расчет даты следующей годовщины - PullRequest
0 голосов
/ 24 февраля 2020

Может ли кто-нибудь помочь мне определить формулу, которая будет использоваться в SQL Сервер, аналогичный формуле 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 Ответ

0 голосов
/ 24 февраля 2020

Кажется, вы могли бы достичь этого довольно легко с помощью 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);
...