当我执行查询时,
select *
from file_log f
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and
F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and
F.TRANS_DT<=('08/30/2017','mm/dd/yyyy')我收到以下错误:
ORA-01797:这个操作符后面必须跟着任意或全部.
请大家帮我写一个正确的查询,这样这个错误就会消失吗?
发布于 2017-08-30 08:10:15
只需使用date关键字和ISO常量:
select *
from file_log f
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and
F.TRANS_DT >= date '2017-08-25' and
F.TRANS_DT <= date '2017-08-30';您将得到错误,因为第二个常量缺少to_date()。但是,您最好对日期常量使用正确的语法。
发布于 2017-08-30 09:13:46
你错过了TO_DATE
select *
from file_log f
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and
F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and
F.TRANS_DT<=TO_DATE('08/30/2017','mm/dd/yyyy') -- Missing on this line为什么要抛出异常
SQL解析器无法识别您打算使用TO_DATE函数,并假设最后一行试图将F.TRANS_DT与1 (ANY)或两者(ALL)进行比较,因此假设查询应该具有语法:
select *
from file_log f
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and
F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and
F.TRANS_DT<= ANY ('08/30/2017','mm/dd/yyyy')这是一个语法上有效的查询。但是,它不会执行,因为尝试解析F.TRANS_DT <= 'mm/dd/yyyy'比较将导致试图隐式地将右侧的字符串转换为几乎肯定会在ORA-01858: a non-numeric character was found where a numeric was expected中失败的日期。但是SQL解析器已经尽了最大的努力来建议缺少什么来使查询有效。
发布于 2018-09-14 10:07:46
对于那些最终搜索ORA-01797错误的人:
当逻辑运算符( =,!=,>,<,<=,>= )的右侧包含多个值时,会出现此错误。
可能的解决办法:
IN代替(=)和使用NOT IN代替( != )处理多个值ALL、ANY或SOME作为记录在案处理多个值。https://stackoverflow.com/questions/45955152
复制相似问题