Postgres LIKE运算符问题

时间:2011-04-12 06:12:16

标签: postgresql

所以,假设我有一个接受一个参数的函数

create function(i_param VARCHAR)

我想在表WHERE col_name LIKE 'i_param%'

中选择一个

我尝试了LIKE i_param||'%',但我认为它确实返回字符串'i_param'而不是放入函数的值。

它不会给我任何错误但返回零行。我如何对输入参数进行LIKE

这个东西很新,所以任何帮助都会很棒!谢谢!

1 个答案:

答案 0 :(得分:1)

作为一个注释,从9.2开始,你可以按照自己的方式做事。在以前的版本中,您应该收到错误。

您没有收到错误的事实表明您使用i_param与列名冲突。我建议为此输入变量前缀(我在工作中使用“in_”)。

例如,如果您:

CREATE TABLE foo (
   foo text,
   bar text
);

然后以下内容不会产生错误:

CREATE FUNCTION search_foo(bar text) RETURNS SETOF foo LANGUAGE SQL AS $$

SELECT * FROM foo WHERE foo ilike bar || '%';

$$;

然而,这实际上是将列foo与列栏进行比较。以下内容将为您提供错误:

CREATE FUNCTION search_foo(in_bar text) returns setof foo language sql as $$

SELECT * from foo where foo ilike in_bar ||'%';

$$;

我强烈建议避免使用与参数同名的变量。这导致许多地方出现问题。