आपके पुनरावर्ती CTE की संरचना बंद है, और संघ का ऊपरी आधा भाग एक बीज आधार मामला होना चाहिए। फिर, पुनरावर्ती भाग को पिछले आने वाले मान में एक दिन जोड़ना चाहिए:
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;
ध्यान दें, हम उपयोग करते हैं TIMESTAMPADD()
INTERVAL
. की समस्या को हल करने के लिए यहां अभिव्यक्ति, जो वास्तव में एक चर नहीं ले सकती।
यदि आप अपनी तालिका में से और मानों से मेल खाने वाली तिथियों की एक श्रृंखला उत्पन्न करने के लिए इस दृष्टिकोण का उपयोग करना चाहते हैं, तो आप शामिल होने का प्रयास कर सकते हैं:
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
जब इस तरह उपयोग किया जाता है, तो पुनरावर्ती CTE एक कैलेंडर . के रूप में कार्य कर रहा होता है टेबल।