Заполните поле следующим понедельником апреля - PullRequest
0 голосов
/ 13 января 2020

Мне нужно создать новое поле в моем запросе выбора, которое выбирает следующий первый понедельник апреля, если это больше, чем '2003-03-31', возможно ли это.

Например, у меня есть дата 2014-04-21, поэтому мне нужно, чтобы вычисленная дата была возвращена как 2015-04-6.

Второй пример будет 2020-01-13, поэтому рассчитанная дата должна будет вернуться к 2020-04-6

ОБНОВЛЕНО

Данные приведены ниже:

enter image description here

Что Я пытался это:

       CASE
       WHEN Date <= '2003-03-31' THEN
           '2004-04-5'
       WHEN Date > '2003-03-31' THEN 
       ????? (First Monday of the next April)
       END AS 'Test1',

Вот где я застрял, извините, я был так расплывчат.

1 Ответ

1 голос
/ 13 января 2020

Поскольку я считаю, что вы написали небольшую ошибку в своем вопросе:

Вторым примером будет 2020-01-13, поэтому вычисленная дата должна будет вернуться 2010-04-6

Вы хотели написать:

Вторым примером будет 2020-01-13, поэтому вычисленная дата должна будет вернуть 2020-04-6

Вот как вы можете это сделать:

SELECT Date_c
       , case when  Date_c >= DATEADD(DAY, (9 - DATEPART(dw,CONVERT(date,concat(year(Date_c), '-04-01')))), CONVERT(date,concat(year(Date_c), '-04-01')))
              then DATEADD(DAY, (9 - DATEPART(dw,CONVERT(date,concat(year(Date_c)+1, '-04-01')))), CONVERT(date,concat(year(Date_c)+1, '-04-01'))) 
              else DATEADD(DAY, (9 - DATEPART(dw,CONVERT(date,concat(year(Date_c), '-04-01')))), CONVERT(date,concat(year(Date_c), '-04-01')))
              end as NEXTMONDAY
from testT
where Date_c > '2003-03-31';

Вот это DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...