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

时间:2016-06-15 15:52:56

标签: postgresql format plpgsql

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

我有10多个参数测试和多个LIKE。 在下面的示例中,第二个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;`

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

2 个答案:

答案 0 :(得分:2)

由于更好​​的可读性,我更喜欢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;`

答案 1 :(得分:1)

你可以忘记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;