Oracle按10分钟间隔生成日期序列的递归CTE语法问题求助
递归CTE语法问题修复方案
存在的语法错误
- 递归CTE定义不符合Oracle语法规范:缺少
AS关键字,且锚查询外层多了一层冗余括号 - 代码中混入了HTML转义字符
<,SQL运行时需要替换为原生小于号<
修正后可直接运行的代码
ALTER SESSION SET NLS_DATE_FORMAT = 'MMDDYYYY HH24:MI:SS'; WITH date_rows AS ( SELECT TO_DATE('2021/08/20 18:30:25', 'YYYY/MM/DD HH24:MI:SS') AS start_date FROM DUAL UNION ALL SELECT start_date + INTERVAL '10' MINUTE FROM date_rows WHERE start_date < TRUNC(start_date) + INTERVAL '1' DAY ) SELECT * FROM date_rows;
可选优化说明
如果不需要生成跨午夜的时间值,可以将终止条件修改为以下写法,避免输出次日时间:
WHERE start_date + INTERVAL '10' MINUTE < TRUNC(start_date) + 1
如果你的Oracle版本不支持INTERVAL语法,也可以用日期计算等价替换:10分钟等价于10/1440(一天共1440分钟),TRUNC(start_date) + 1等价于当日午夜。
内容的提问来源于stack exchange,提问作者Beefstu
相关产品推荐
相关产品推荐

