Oracle执行SQL查询报ORA-00936 missing expression错误求助
问题根因
- 你当前使用的
CONVERT、DATEADD、GETDATE()均为SQL Server专属函数,Oracle数据库原生不支持以上语法,这是触发ORA-00936: missing expression报错的核心原因 - 你后续修改的写法存在
TO_CHAR用法错误:TO_CHAR(8)是无效语法,TO_CHAR的第一个入参需要是待转换的日期/数值类型对象,不能直接传入长度值
解决方案
Oracle语法下和你原有逻辑等价的WHERE子句写法如下:
WHERE TO_CHAR(20211231) <= TO_CHAR(SYSDATE - 90, 'YYYYMMDD')
完整可运行的查询语句:
SELECT FECHADOC, FECHACONT, CLASEDOC, SOCIEDAD, MONEDA, TIPOCAMBIO, PERIODO, REFERENCIA, TEXTOCAB, ID_REGISTRO FROM ESQUEMA.TABLE WHERE TO_CHAR(20211231) <= TO_CHAR(SYSDATE - 90, 'YYYYMMDD')
优化建议
- 你当前的WHERE条件是固定值和动态计算值的比对,整个条件要么恒真要么恒假,大概率是写反了过滤逻辑:如果你是要过滤表中日期字段(比如
FECHADOC)大于等于90天前的日期,建议使用如下写法,避免函数转换导致日期字段索引失效:
WHERE FECHADOC >= TRUNC(SYSDATE) - 90
- 如果你确实需要做日期格式比对,建议统一转为DATE类型进行比较,运算效率和准确性都高于字符串比对:
WHERE TO_DATE('20211231', 'YYYYMMDD') <= TRUNC(SYSDATE) - 90
内容的提问来源于stack exchange,提问作者KLM
相关产品推荐
相关产品推荐

