【问题标题】:Invalid Column Type Query无效的列类型查询
【发布时间】:2018-08-23 20:13:56
【问题描述】:

试图让这个 oracle db 查询正常工作时遇到了困难。我正在尝试从表中提取在前端选择的日期之间的所有记录。

查询:

SELECT *
FROM (
    SELECT *
    FROM COMPRATER_REQUESTS
    WHERE VendorName = ?
        AND EFFECTIVEDATE >= TO_DATE(?, 'yyyy/mm/dd')
        AND EFFECTIVEDATE <= TO_DATE(?, 'yyyy/mm/dd')
    )
WHERE ROWNUM <= 100

传递给占位符的参数是:

参数:[Walmart, Tue Jun 19 00:00:00 EDT 2018, Tue Oct 23 00:00:00 EDT 2018]

我不断返回的错误是:

错误消息:查询 HVQ DB 时发生异常。
异常堆栈跟踪:java.sql.SQLException: Invalid column type Query

【问题讨论】:

  • 您能否提供一些表格中的示例数据?
  • 日期参数是什么类型?字符串还是日期时间?如果是日期,那么为什么要调用 to_Date,如果是字符串,那么为什么使用错误的格式?
  • 在内部查询中,在最后的 WHERE 子句中有AND TO_DATE(...)。在关键字AND 之后,您必须有一个逻辑条件,而不是计算为日期的表达式。你在那里试图做什么?也许有EFFECTIVEDATE &lt;= ...?也许您在最初有 BETWEEN ... AND ... 条件后编辑了查询?
  • 抱歉,第二个 to_date 应该在

标签: sql oracle exception


【解决方案1】:

您输入的日期字符串与您在 TO_DATE 中指定的格式不匹配。

参数:

Walmart, 
Tue Jun 19 00:00:00 EDT 2018, 
Tue Oct 23 00:00:00 EDT 2018

根据您的查询:

AND EFFECTIVEDATE >= TO_DATE(?, 'yyyy/mm/dd')
AND TO_DATE(?, 'yyyy/mm/dd')

我认为既然你在那里有一个时区,你需要使用 to_timestamp_tz 函数。

'DY MON DD HH24:MI:SS TZD YYYY'

【讨论】:

  • 好吧,如果时区很重要,那么 TO_DATE 是错误的,因为 Oracle 日期不支持时区。它应该是 TO_TIMESTAMP_TZ。但是 OP 遇到的错误(无论如何是第一个错误)已经在解析阶段,这些值甚至从未传递给查询(仅在运行时发生)。
  • 是的。我应该删除这个答案,还是保留它,因为它解决了可能是查询问题的其他问题?
猜你喜欢
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 2019-11-21
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
相关资源
最近更新 更多