T-SQL - 再帰CTEで指定した期間の日付一覧を作る

T-SQLのメモです。

開始日と終了日を指定して、その期間の日付一覧を取得したいと思います。

再帰CTE(共通テーブル式)を使って書くとこんな感じになるのかなと。

-- 指定した期間の日付一覧を取得するクエリ

-- @start 開始日(その日は含む)
-- @end 終了日(その日は含まない、とする)
declare @start date = N'2018-07-01';
declare @end date = N'2018-08-01';

with Dates(Date)
as (
    select @start
    union all
    select dateadd(day, 1, Date)
    from Dates
    where Date < dateadd(day, -1, @end)
)
select *
from Dates
-- 再帰回数を無制限にするなら
option (maxrecursion 0);

再帰CTEを使わない方法をちょっと考えてみたんですが思いつかなかったです。

参考