【发布时间】:2022-01-18 12:06:49
【问题描述】:
在 PostgreSQL 函数中参数化间隔日期类型的最佳方法是什么?我有以下功能
CREATE OR REPLACE FUNCTION testing(
min_time integer
)
RETURNS void AS
$BODY$
BEGIN
EXECUTE format('CREATE TABLE foo AS
SELECT
gid,
now() + concat(%s, ' hours')::interval as x,
FROM foobar
limit 3 ',min_time );
END;
$BODY$
LANGUAGE plpgsql;
每次我尝试执行该函数时,我都会收到以下错误ERROR: syntax error at or near "hours"
【问题讨论】:
-
您没有正确嵌套字符串。嵌入在字符串常量中的单引号需要通过加倍来转义。
concat(%s, '' hours'')::interval- 但使用make_interval()可能会容易得多 -
为什么要使用动态 SQL?在这种情况下,这似乎毫无意义
-
这只是一个虚拟示例。我有使用动态 SQL 的用例,因为我需要在不同的上下文中使用它
标签: sql postgresql postgresql-14