提问者:小点点

ORA-00920:无效的关系运算符


在数据库中,我试图提取晚于指定日期的信息。我应该事先注意到日期的格式很奇怪:YYYYMMDDHH24MISS###其中##是一个两个字母的字符串,它定义了一些对我的查询无用的东西。因此,我使用substr来删除它们。

下面的查询抛出以下错误,我无法找出原因:

[错误代码:920,SQL状态:42000]ORA-00920:无效的关系运算符

我的查询:

SELECT *
  FROM table_name
 WHERE to_date(substr(COLUMN_NAME,1,14), 'YYYYMMDDHH24MISS')) >=
       to_date('MIN_DATE', 'YYYYMMDDHH24MISS')

我已经检查过了,以确保日期被正确定义,而且确实如此。

我用于MIN_DATE的示例是:20140101000000


共2个答案

匿名用户

在第一个截止日期的末尾有一个额外的括号

匿名用户

在Oracle中,当您缺少比较操作时会出现此错误,例如,=——正如John Maillet已经指出的那样。

我关心的是where子句的第二部分:

where to_date(substr(COLUMN_NAME, 1, 14), 'YYYYMMDDHH24MISS') >=
                  to_date('MIN_DATE', 'YYYYMMDDHH24MISS')

在单引号中有MIN\u DATE。这被解释为一个包含八个字母的字符串,以'M'开头,以'E'结尾。这不是一个变量。你大概是说:

where to_date(substr(COLUMN_NAME, 1, 14), 'YYYYMMDDHH24MISS') >=
                  to_date(MIN_DATE, 'YYYYMMDDHH24MISS')

字符串和日期常量只能使用单引号。

我应该补充说,你应该能够做这个比较,而不必转换为日期:

where left(COLUMN_NAME, 14) = MIN_DATE