ORA-01756报错:拼接日期条件的SQL片段执行失败如何解决
问题原因
- 核心问题是拼接的SQL字符串没有补全语法结构,单引号未正确配对,Oracle解析时找不到匹配的闭合引号,因此抛出
ORA-01756: quoted string not properly terminated错误。 - 具体缺失的部分:你要生成的目标格式是
BETWEEN TO_DATE('日期1', '格式参数') AND TO_DATE('日期2', '格式参数'),但原代码在拼接完第二个to_char(CURRENT_DATE + 1, ...)之后就直接结束了,缺少了:- 第二个TO_DATE的日期值需要的闭合单引号(对应转义的
''') - 第二个TO_DATE的日期格式参数部分
- 第二个TO_DATE的右括号
- 整个拼接字符串的结尾闭合单引号
- 第二个TO_DATE的日期值需要的闭合单引号(对应转义的
修正后的代码
SELECT 'BETWEEN TO_DATE(''' || TO_CHAR(CURRENT_DATE, 'dd/MM/yyyy 00:00:00') || ''', ''DD/MM/YYYY HH24:MI:SS'') AND TO_DATE(''' || TO_CHAR(CURRENT_DATE + 1, 'dd/MM/yyyy 00:00:00') || ''', ''DD/MM/YYYY HH24:MI:SS'')' AS date_query_condition FROM DUAL;
运行后会生成符合要求的日期范围条件片段,示例输出:
BETWEEN TO_DATE('21/05/2024 00:00:00', 'DD/MM/YYYY HH24:MI:SS') AND TO_DATE('22/05/2024 00:00:00', 'DD/MM/YYYY HH24:MI:SS')
补充说明
Oracle中拼接字符串时,两个连续单引号''会转义为一个普通单引号',如果最终生成的字符串里需要出现N个单引号,拼接时就要写2*N个单引号,写完可以数一下整行SQL的单引号总数是否为偶数,避免配对错误。
内容的提问来源于stack exchange,提问作者okjfokjrf
相关产品推荐
相关产品推荐

