Postgres LIKE вопрос оператора - PullRequest
0 голосов
/ 12 апреля 2011

Допустим, у меня есть функция, которая принимает один параметр

create function(i_param VARCHAR)

Я хочу выбрать один стол WHERE col_name LIKE 'i_param%'

Я пытался сделать LIKE i_param||'%', но я думаю, что он буквально возвращает строку 'i_param', а не значение, введенное в функцию.

Это не дает мне никаких ошибок, но возвращает ноль строк. Как бы я сделал LIKE для входного параметра?

Довольно новичок в этом деле, поэтому любая помощь будет отличной! Спасибо!

1 Ответ

1 голос
/ 20 марта 2013

Как примечание, начиная с 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 ||'%';

$$;

Я настоятельно рекомендую избегать переменных с такими же именами, что и аргументы. Это приводит к проблемам во многих местах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...