ORA-00936: 缺少表达式解决方案 - 转换函数

Posted

技术标签:

【中文标题】ORA-00936: 缺少表达式解决方案 - 转换函数【英文标题】:ORA-00936: missing expression Solution- Convert function 【发布时间】:2021-12-19 17:48:02 【问题描述】:

在 oracle 中执行此查询时出现错误

ORA-00936: missing expression
00936. 00000 - "missing expression"

如果我运行查询到它给我的结果,那么我推断问题来自哪里,但是,我无法确定它是什么

SELECT FECHADOC, FECHACONT, CLASEDOC, SOCIEDAD, MONEDA, TIPOCAMBIO, PERIODO, 
       REFERENCIA, TEXTOCAB, ID_REGISTRO 
FROM ESQUEMA.TABLE 
WHERE CONVERT(CHAR(8),20211231,112) <= CONVERT(CHAR(8),DATEADD(DAY,-90,GETDATE()),112)

我已经用过:

 WHERE CONVERT( TO_CHAR(8),20201231,112) <= 
      (CONVERT(TO_CHAR(8),DATEADD(DAY,-90,GETDATE()),112) )

它总是给我一个错误

【问题讨论】:

这些是您为问题输入的静态值吗?你真的是把静态值20201231和Today-90比较,还是这里有表格列? convert(带有该参数列表)、dateaddgetdate 不是内置的 Oracle 函数。您似乎正在使用 SQL Server 或其他一些非 Oracle 数据库中的函数。我猜你没有在本地定义这些函数,因此问题。 20201231 和 -90 是使用该值解析的参数 【参考方案1】:

如果这真的是 Oracle,那么 dateaddgetdate 就不是 Oracle 函数。看起来像 MS SQL Server 的。另外,tabletables 的保留字,您不能命名一个表(或任何其他对象)table

无论如何:看起来这就是您可能正在寻找的东西:

SELECT FECHADOC, FECHACONT, CLASEDOC, SOCIEDAD, MONEDA, 
       TIPOCAMBIO, PERIODO, REFERENCIA, 
       TEXTOCAB, ID_REGISTRO 
FROM ESQUEMA.TABLE 
where to_date('20211231', 'yyyymmdd') <= trunc(sysdate) - 90;

【讨论】:

esquema.table 只是为了举例说明表的名称,您的回答对我有帮助,非常感谢... 不客气,如果有帮助我很高兴。

以上是关于ORA-00936: 缺少表达式解决方案 - 转换函数的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00936: 缺少表达式

ORA-00936 缺少表达式

ORA 00936 缺少表达式

出现错误 ORA-00936: 缺少表达式

ora:00936 缺少表达式错误

ORA-00936: 缺少表达式 oracle