Struktur CTE rekursif Anda tidak aktif, dan bagian atas serikat harus menjadi kasus dasar benih. Kemudian, bagian rekursif harus menambahkan satu hari ke nilai masuk sebelumnya:
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;
Sebagai catatan, kami menggunakan TIMESTAMPADD()
di sini untuk mengatasi masalah INTERVAL
ekspresi, yang tidak dapat benar-benar mengambil variabel.
Jika Anda ingin menggunakan pendekatan ini untuk menghasilkan serangkaian tanggal yang cocok dengan nilai from dan to di tabel Anda, maka Anda dapat mencoba bergabung:
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
Saat digunakan dengan cara ini, CTE rekursif bertindak sebagai kalender tabel.