SQL один запрос на выборку следующих 12 дат для заданной даты ввода - PullRequest
0 голосов
/ 18 марта 2020

Я хочу, чтобы один запрос извлекал следующие 12 дат (первый день месяца) для данной даты.

Например, введите дату 01.01.2009 (ДД / ММ / ГГГГ), а затем вывод должен быть следующим:

output

Я попытался запустить al oop, используя функцию DATEADD как:

DECLARE @i INT
SET @i = 0
while(@i<12)
BEGIN
SELECT DATEADD(mm, @i, '01/01/2019');
SET @i = @i+1
END

Это работает, но Есть ли способ получить требуемый вывод одним запросом?

Ответы [ 3 ]

0 голосов
/ 18 марта 2020

С MariaDB и их Механизмом хранения последовательностей

SELECT STR_TO_DATE('01/01/2019','%d/%m/%Y') + seq DAY FROM seq_0_to_11

ref: fiddle

0 голосов
/ 18 марта 2020

Для SQL Сервер 2017:

;with cte as (
  select cast('01/01/2019' as date) as DT, 1 as Id
  union all
  select dateadd(day, 1, DT) as DT, Id + 1 as Id
  from cte where Id < 12
)
select format(DT, 'MM/dd/yyyy') as DT from cte;

http://sqlfiddle.com/#! 18 / 9eecb / 78996

0 голосов
/ 18 марта 2020

Решение для SQL Сервер

with cte(DateVal) as(
SELECT CONVERT(datetime,'2019/01/01')  dt
union all
select  DATEADD(day,1,dateval) from cte where DateVal<DATEADD(day,11,'2019/01/01') )
SELECT * FROM CTE
...