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

时间:2014-07-25 17:57:22

标签: sql oracle

在数据库中,我试图提取晚于指定日期的信息。我应该事先注意到日期是奇怪的格式: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 个答案:

答案 0 :(得分:10)

在第一个to_date

的末尾有一个额外的括号

答案 1 :(得分:3)

如果缺少比较操作,例如=,就会在Oracle中收到此错误,正如John Maillet已经注意到的那样。

我关心的是where条款的第二部分:

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

您的单引号中有MIN_DATE。这被解释为一个字符串,其中包含八个字母,以'M'开头,以'E'结尾。这不被解释为作为变量。大概你的意思是:

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

您应该只对字符串和日期常量使用单引号。

我应该补充一点,您应该能够进行此比较而无需转换为日期:

where left(COLUMN_NAME, 14) = MIN_DATE