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

Rya*_*588 4 sql oracle

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

我的查询,下面,抛出以下错误,我发现原因:

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

我的查询:

SELECT *
  FROM table_name
 WHERE to_date(substr(COLUMN_NAME,1,14), 'YYYYMMDDHH24MISS')) >=
       to_date('MIN_DATE', 'YYYYMMDDHH24MISS')
Run Code Online (Sandbox Code Playgroud)

我已检查以确保正确定义日期,它们是.

我用过的例子MIN_DATE是:20140101000000

Joh*_*let 10

在第一个to_date的末尾有一个额外的括号


Gor*_*off 6

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

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

where to_date(substr(COLUMN_NAME, 1, 14), 'YYYYMMDDHH24MISS') >=
                  to_date('MIN_DATE', 'YYYYMMDDHH24MISS')
Run Code Online (Sandbox Code Playgroud)

你有MIN_DATE单引号。这被解释为一个包含八个字母的字符串'M''E'. 这不被解释为变量。想必你的意思是:

where to_date(substr(COLUMN_NAME, 1, 14), 'YYYYMMDDHH24MISS') >=
                  to_date(MIN_DATE, 'YYYYMMDDHH24MISS')
Run Code Online (Sandbox Code Playgroud)

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

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

where left(COLUMN_NAME, 14) = MIN_DATE
Run Code Online (Sandbox Code Playgroud)