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&gt; TIMESTAMP? - '30 day':: INTERVAL)AND )当参数是typecasted时(即我之前把TIMESTAMP放在?)我得到以下错误
对于第二行中的文本数据,情况并非如此(消息.TIME&lt; TIMESTAMP '2016-08-03'+'1天':: INTERVAL)和
当我将条款更改为(messages.TIME&gt; ?:: TIMESTAMP - '30天':: INTERVAL)时 ) (即我把TIMESTAMP放在后面?) 任何人都可以对正在发生的事情有所了解吗?谢谢!
注意: PostGresVersion - 9.6 OdBC驱动程序 - 32位驱动程序(位于C:\ Program Files(x86)\ psqlODBC \ 0905 \ bin \ psqlodbc30a.dll。) Postgres 8.4也是如此。
答案 0 :(得分:0)
可以使用以下任何一种符号输入任意类型的常量:
type 'string'
'string'::type
CAST ( 'string' AS type )
将字符串常量的文本传递给名为type的类型的输入转换例程。结果是指示类型的常量。
[...]
::
,CAST()
和函数调用语法也可用于指定任意表达式的运行时类型转换,如第4.2.9节中所述。为避免语法歧义,type 'string'
语法只能用于指定简单文字常量的类型。
因此,您只能将此语法与字符串文字一起使用,而不是像您尝试的那样使用参数。
答案 1 :(得分:0)
您试图添加的术语(例如字符串)可能应该包装在“”中。它对我有用,尽管我无法解释如何或为什么。