在 postgresql--9.5 中的执行格式查询中动态使用 LIKE 模式

Using LIKE pattern dynamically in execute format query in postgresql--9.5

我想动态地将脚注插入 LIKE 模式,但它给出错误

ERROR: unrecognized conversion type specifier "'"........

这是我的查询:

   RETURN QUERY EXECUTE format ('SELECT foocolumn
             FROM footable  
                WHERE foocolumnother LIKE ''%L%''  ', footext);

如果您想将 % 添加到格式字符串中,您需要将其加倍,例如%F%%

%L也正确地添加了单引号,因此您不需要将它们放在格式字符串中。

但是:使用 %F%% 会生成 'bla'% - 这是不正确的。

您需要将通配符添加到 变量 而不是格式字符串:

RETURN QUERY EXECUTE format ('SELECT foocolumn
         FROM footable  
         HERE foocolumnother LIKE %L'  ', concat(footext, '%'));

晚会有点晚,但根据 Erwin 的 answer and the document,您还可以尝试正则表达式的 ~ 字符。所以测试这个

RETURN QUERY EXECUTE format ('SELECT foocolumn
             FROM footable  
                WHERE foocolumnother ~ %L  ', footext);

另一个迟到的条目。在 Postgres 11.x:

中,将单引号和百分比都加倍对我有用
l_query text := FORMAT('
    SELECT e.gid, e.sessionname, e.shared, e.created, e.created_by 
    FROM exercise e
    WHERE LOWER(e.created_by) LIKE ''%%%s%%'';'
    , LOWER(p_user));

RETURN QUERY EXECUTE l_query;