当字符串中有 % 时,如何在 PostgreSQL 中使用格式函数?

How to use the format function in PostgreSQL when I have % in the string?

我有一个函数,如果它们不为 null 或为空,则将多个参数合并到一个字符串中。在特定参数上,我将 % 字符用于 LIKE 条件。 我的问题是格式函数试图对其执行转换,就像它是一个参数一样。我怎样才能避免这种情况?

我对参数和多个 LIKE 进行了 10 多次测试。 在下面的示例中,第二个 FORMAT 函数尝试转换 TEST%

中的 %
_nom_personne_like := 'TEST%';
_type_activite_personne := 'SOMETHING';
IF _nom_personne_like != '' THEN
    _query := _query || ' AND personne_planning.nom_personne LIKE %L ';
    _query := FORMAT(_query,_nom_personne_like);
END IF; 
IF _type_activite_personne != '' THEN 
    _query := _query || ' AND personne_planning.type_activite = %L ';
    _query := FORMAT(_query,_type_activite_personne);
END IF;`

服务器返回的消息是:无法识别转换类型说明符 « ' » 我已经尝试将 % 加倍,但没有用。

你可以像这样忘记 format() 函数:

_nom_personne_like := 'TEST%';
_type_activite_personne := 'SOMETHING';
IF _nom_personne_like != '' THEN
    _query := _query || ' AND personne_planning.nom_personne LIKE ' ||
              quote_literal(_nom_personne_like);
END IF; 
IF _type_activite_personne != '' THEN 
    _query := _query || ' AND personne_planning.type_activite = ' ||
              quote_literal(_type_activite_personne);
END IF;

我更喜欢 format() 而不是字符串连接,因为它的可读性更好。 我遵循不使用变量作为函数的第一个参数的规则。 您的代码可能如下所示:

_nom_personne_like := 'TEST%';
_type_activite_personne := 'SOMETHING';
IF _nom_personne_like != '' THEN
    _query := 
        format(
            '%s AND personne_planning.nom_personne LIKE %L ', 
            _query,
            _nom_personne_like);
END IF; 
IF _type_activite_personne != '' THEN 
    _query := 
        format(
            '%s AND personne_planning.type_activite = %L ',
            _query,
            _type_activite_personne);
END IF;`