Strukturen för din rekursiva CTE är avstängd, och den övre halvan av föreningen bör vara ett fröbasfall. Sedan bör den rekursiva delen lägga till en dag till det tidigare inkommande värdet:
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;
Observera att vi använder TIMESTAMPADD()
här för att komma runt problemet med INTERVAL
uttryck, som inte riktigt kan ta en variabel.
Om du vill använda det här tillvägagångssättet för att generera en serie datum som matchar värdena från och till i din tabell, kan du prova att gå med:
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
När den används på detta sätt fungerar den rekursiva CTE som en kalender bord.