Die Struktur Ihres rekursiven CTE ist deaktiviert, und die obere Hälfte der Union sollte ein Seed-Basisfall sein. Dann sollte der rekursive Teil einen Tag zum vorherigen eingehenden Wert hinzufügen:
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;
Beachten Sie, dass wir TIMESTAMPADD()
verwenden hier, um das Problem des INTERVAL
zu umgehen Ausdruck, der eigentlich keine Variable annehmen kann.
Wenn Sie diesen Ansatz verwenden möchten, um eine Reihe von Daten zu generieren, die mit den Werten von und bis in Ihrer Tabelle übereinstimmen, können Sie einen Join versuchen:
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
Bei dieser Verwendung fungiert der rekursive CTE als Kalender Tabelle.