La structure de votre CTE récursif est désactivée et la moitié supérieure de l'union doit être un cas de base de départ. Ensuite, la partie récursive doit ajouter un jour à la valeur entrante précédente :
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;
À noter, nous utilisons TIMESTAMPADD()
ici pour contourner le problème de l'INTERVAL
expression, qui ne peut pas vraiment prendre une variable.
Si vous souhaitez utiliser cette approche pour générer une série de dates qui correspondent aux valeurs de et à dans votre table, vous pouvez essayer une jointure :
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
Lorsqu'il est utilisé de cette façon, le CTE récursif agit comme un calendrier tableau.