PostgreSQL递归CTE生成连续日期报错问题求助
PostgreSQL递归CTE生成连续日期的问题解决
问题1:OPTION (MAXRECURSION 0)语法错误
- 这是SQL Server专属语法,PostgreSQL完全不支持该选项。
- PostgreSQL递归CTE的递归深度由参数
max_recursion_depth控制(默认值1000),如果需要无限制递归,可在会话级别执行:
该设置仅对当前会话有效,全局修改需调整SET max_recursion_depth = 0;postgresql.conf配置。
问题2:无法引用CTE项,需使用WITH RECURSIVE
- PostgreSQL要求递归CTE必须显式声明
WITH RECURSIVE,不能用普通的WITH关键字。 - 另外原代码中的
Dateadd是SQL Server函数,PostgreSQL推荐直接用日期运算语法(更简洁高效),比如thedate + 1(日期加整数等价于加N天),或thedate + INTERVAL '1 day'。
修正后的完整查询代码
WITH RECURSIVE datecalendar AS ( SELECT '2023-08-08'::DATE AS thedate UNION ALL SELECT thedate + 1 FROM datecalendar WHERE thedate + 1 <= '2023-08-12'::DATE ) SELECT * FROM datecalendar;
执行结果
会生成从2023-08-08到2023-08-12的连续日期列表:
thedate ------------ 2023-08-08 2023-08-09 2023-08-10 2023-08-11 2023-08-12
内容的提问来源于stack exchange,提问作者DDS
相关产品推荐
相关产品推荐

