Struktura vašeho rekurzivního CTE je vypnutá a horní polovina sjednocení by měla být základním případem. Potom by rekurzivní část měla přidat jeden den k předchozí příchozí hodnotě:
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;
Za zmínku stojí, že používáme TIMESTAMPADD()
zde, abyste se vyhnuli problému INTERVAL
výraz, který ve skutečnosti nemůže přijmout proměnnou.
Pokud chcete tento přístup použít ke generování řady dat, která odpovídají hodnotám od a do ve vaší tabulce, můžete zkusit spojení:
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
Při použití tímto způsobem funguje rekurzivní CTE jako kalendář tabulka.