【问题标题】:Postgres: Error [42601] Error: Syntax error at or near "$2". Error while executing the QueryPostgres:错误 [42601] 错误:“$2”处或附近的语法错误。执行查询时出错
【发布时间】:2016-11-16 01:11:34
【问题描述】:
SELECT     
    to_char(messages. TIME, 'YYYY/MM/DD') AS FullDate, 
    to_char(messages. TIME, 'MM/DD') AS PartialDate, 
             COUNT(CASE WHEN message_definitions.error_category = ? THEN 1 END) AS Errors, 
    error_categories.threshold, 
    COUNT(CASE WHEN messages.message_id = 14 THEN 1 END) AS Picks
FROM    
    messages LEFT JOIN
    message_definitions USING (message_id) LEFT JOIN
    error_categories USING (error_category)
WHERE   
    (messages. TIME > TIMESTAMP ? - '30 day'::INTERVAL) AND 
    (messages. TIME < TIMESTAMP '2016-08-03' + '1 day'::INTERVAL) AND 
    (messages.system_id = ?) AND 
    (messages.message_id = 14 OR
     message_definitions.error_category = ?)
GROUP BY 
    FullDate, PartialDate, error_categories.threshold
ORDER BY
    FullDate DESC LIMIT 40

在上述查询中,在 where 子句中,(第一行:(messages.TIME > TIMESTAMP ? - '30 day'::INTERVAL) AND ) 当参数被类型转换时(即当我把 TIMESTAMP 放在之前?)我得到以下错误

第二行中的文本数据不是这样(消息。TIME TIMESTAMP '2016-08-03' + '1 day'::INTERVAL)AND

当我将子句更改为 (messages.TIME > ? ::TIMESTAMP - '30 day'::INTERVAL) AND ) (即我把 TIMESTAMP 放在后面?) 任何人都可以对正在发生的事情有所了解吗?谢谢!!

注意: PostGresVersion - 9.6 OdBC 驱动程序 - 32 位驱动程序(位于 C:\Program Files (x86)\psqlODBC\0905\bin\psqlodbc30a.dll。) Postgres 8.4 也是如此。

【问题讨论】:

  • 将参数绑定到上述查询的代码在哪里?您是否尝试逐字运行上述查询?
  • 是的,目前我正在逐字运行查询。

标签: postgresql


【解决方案1】:

The documentation 说:

可以使用以下任何一种表示法输入任意类型的常量:

<em>type</em> '<em>string</em>'
'<em>string</em>'::<em>type</em>
CAST ( '<em>string</em>' AS <em>type</em> )

字符串常量的文本被传递给名为 type 的类型的输入转换例程。结果是指定类型的常量。

[...]

::CAST() 和函数调用语法也可用于指定任意表达式的运行时类型转换,如第 4.2.9 节所述。为避免语法歧义,<em>type</em> '<em>string</em>' 语法只能用于指定简单文字常量的类型。

因此,您只能将此语法与字符串文字一起使用,而不能像您尝试的那样与参数一起使用。

【讨论】:

  • 遇到了类似的问题。就像 time ? 失败但 CAST(? AS time) 有效。谢谢!
【解决方案2】:

您尝试添加的术语(例如字符串)可能应该包含在 "" 中。它对我有用,但我无法解释如何或为什么。

【讨论】:

  • 考虑在您的答案中添加更多信息,以便其他人可以更好地理解您的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
相关资源
最近更新 更多