2011-04-12 65 views
0

所以我們可以說我有一個函數,它在一個參數Postgres的LIKE操作問題

create function(i_param VARCHAR) 

我希望做一個選擇一個表WHERE col_name LIKE 'i_param%'

我試圖做LIKE i_param||'%'但我認爲它確實回報字符串'i_param'不是放入函數的值。

它不給我任何錯誤,但返回零行。我將如何對輸入參數執行LIKE

這個東西很新,所以任何幫助都會很棒!謝謝!

+1

關於匹配的數量 - 請注意,Postgres的LIKE區分大小寫。 – 2011-04-12 07:25:26

+0

如果'LIKE i_param ||'%''不起作用比你沒有向我們展示所有東西。你能發佈一個完整的例子,表明它不起作用嗎? – 2011-04-12 08:37:09

+0

謝謝我沒有意識到LIKE區分大小寫。我剛剛發現了ILIKE,不是那樣我會用它來代替。 – t0x13 2011-04-12 14:49:53

回答

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 ||'%'; 

$$; 

我強烈建議避免與參數具有相同名稱的變量。這在許多地方導致問題。