2016-12-04 54 views
1

我想在PostgreSQL中用戶的名字上使用ILIKE查詢。有first_name和last_name的列,我希望搜索詞匹配兩個連接,並在兩個連接之間留有空格,以便用戶可以使用一個輸入搜索或全名。 「John」,「Doe」或「John Doe」。PostgreSQL ILIKE concavinated列不工作

這總是不返回任何結果:

SELECT * FROM user_profiles WHERE first_name || ' ' || last_name ILIKE '%ryan%'

這總是返回一個結果,我期待:

SELECT * FROM user_profiles WHERE first_name ILIKE '%ryan%'

基於一切我讀過,第一個查詢應按照我的期望工作,但事實並非如此。沒有結果,也沒有錯誤。我在這裏錯過了什麼?

回答

1

這是太長的評論。

如果last_nameNULL(如果first_nameNULL,則類似地,第一個查詢將返回無結果)。

所以,試試這個來代替:

WHERE first_name || ' ' || COALESCE(last_name, '') ILIKE '%ryan%' 

或:

WHERE CONCAT_WS(' ', first_name, last_name) ILIKE '%ryan%' 

concat_ws()函數忽略不NULL(除了第一個參數)參數。

+0

你是對的,'last_name'爲空。我發現剛剛發佈並試圖用'(first_name :: text ||''|| last_name :: text)修復'但是這也不起作用。您的答案能夠奏效,並返回預期的結果。謝謝! (一旦它允許我將在5分鐘內接受) – Ryan