再帰CTEの構造はオフであり、ユニオンの上半分はシードベースケースである必要があります。次に、再帰部分は前の着信値に1日追加する必要があります:
WITH RECURSIVE cte (n, dt) AS (
SELECT 1, '2019-09-20'
UNION ALL
SELECT n + 1, TIMESTAMPADD(DAY, n, '2019-09-20') FROM cte WHERE n <= 5
)
SELECT * FROM cte;
注目すべきは、TIMESTAMPADD()
を使用することです INTERVAL
の問題を回避するためにここに 式。実際には変数を取ることができません。
このアプローチを使用して、テーブルの開始値と終了値に一致する一連の日付を生成する場合は、結合を試すことができます。
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
このように使用すると、再帰CTEはカレンダーとして機能します。 テーブル。