【发布时间】:2021-07-01 08:49:45
【问题描述】:
我有两张桌子,例如:
CREATE TABLE table_1
(
one_column INTEGER,
two_column INTEGER,
three_column INTEGER
);
CREATE TABLE table_2
(
id SERIAL,
column_1 INTEGER,
column_2 INTEGER,
column_3 INTEGER,
name TEXT,
step INTEGER
);
我还有一个存储函数,它接收许多参数。在函数中,我使用EXECUTE format() 的调用将INSERT 的一行插入到一个表中,类似这样...
CREATE OR REPLACE PROCEDURE function_p (
p_name TEXT DEFAULT '',
p_step INT DEFAULT NULL
)
LANGUAGE plpgsql AS $$
BEGIN
EXECUTE format('
INSERT INTO table_2 (column_1,column_2,column_3,name,step)
SELECT one_column, two_column,three_column,%L,%s
FROM table_1',p_name,p_step);
END;
$$
(感谢@jim-jones)
但是,在我的“实际”函数中,INNER JOIN 在SELECT 中也有一个类似于以下条件的内容...
ON (month_diff(d, now()::DATE) % month_interval) = 0
我收到类似 unrecognized format() type specifier " " 之类的错误,我想我是否需要转义 '%' 符号,如果需要,如何转义?是“\%”还是“%%”还是别的什么?我已经尝试过这些并得到同样的失败。
【问题讨论】:
-
%%应该可以工作:你在这里得到了什么?SELECT FORMAT('%s%%',1) -
来自documentation:如果要在结果字符串中包含 %,请使用双百分比 %%。既然您已经尝试过了,也许您可以尝试
\%%甚至%%%。 -
你想计算模数?
-
抱歉,我试过
%%并没有注意到它正在工作,因为我的废话代码中出现了另一个错误。愚蠢的截止日期和疲惫的开发人员在这里......谢谢大家
标签: sql postgresql plpgsql