【发布时间】:2014-12-31 22:32:58
【问题描述】:
我在 postgresql 中使用 sql
cast(col as timestamp($1))
它给了我关于参数的错误
当我直接给出数字时,sql可以工作:
cast(col as timestamp(1))
那么timestamp不带函数参数?
【问题讨论】:
标签: sql postgresql plpgsql dynamic-sql
我在 postgresql 中使用 sql
cast(col as timestamp($1))
它给了我关于参数的错误
当我直接给出数字时,sql可以工作:
cast(col as timestamp(1))
那么timestamp不带函数参数?
【问题讨论】:
标签: sql postgresql plpgsql dynamic-sql
precision modifier of the timestamp type 是 name 类型的一部分,不能在普通 SQL 中参数化。这不是一个函数,即使带括号的语法看起来一样。
为此,您需要动态 SQL。在 PL/pgSQL 函数中,将语句构建为字符串并使用EXECUTE 运行它。比如:
EXECUTE 'SELECT col::timestamp(' || $1 || ')'
INTO my_var;
$1 是 integer。不是text 之类的字符串类型,否则可能存在 SQL 注入漏洞。
【讨论】: