当字符串中有 % 时,如何在 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;`
我有一个函数,如果它们不为 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;`