La struttura del tuo CTE ricorsivo è disattivata e la metà superiore dell'unione dovrebbe essere un caso di base seme. Quindi, la parte ricorsiva dovrebbe aggiungere un giorno al valore in entrata precedente:
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;
Da notare, utilizziamo TIMESTAMPADD()
qui per aggirare il problema dell'INTERVAL
espressione, che in realtà non può accettare una variabile.
Se desideri utilizzare questo approccio per generare una serie di date che corrispondano ai valori from e to nella tua tabella, puoi provare un join:
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
Se utilizzato in questo modo, il CTE ricorsivo agisce come un calendario tabella.