Cấu trúc của CTE đệ quy của bạn bị tắt và nửa trên của liên kết phải là một trường hợp cơ sở hạt giống. Sau đó, phần đệ quy sẽ thêm một ngày vào giá trị đến trước đó:
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;
Lưu ý, chúng tôi sử dụng TIMESTAMPADD()
tại đây để giải quyết vấn đề của INTERVAL
biểu thức, thực sự không thể nhận một biến.
Nếu bạn muốn sử dụng phương pháp này để tạo một chuỗi ngày phù hợp với các giá trị từ và đến trong bảng của mình, thì bạn có thể thử tham gia:
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
Khi được sử dụng theo cách này, CTE đệ quy hoạt động như một lịch bảng.