PostgreSQL ILIKE在连接列上不起作用

时间:2016-12-04 00:22:04

标签: postgresql

我试图在PostgreSQL中使用ILIKE查询用户的名字。 first_name和last_name有列,我希望搜索词匹配两个连接的搜索词,其间有空格,以便用户可以使用一个输入搜索其中一个或全名。 "约翰" " Doe的"或者" John Doe"。

这总是不会返回结果:

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

这总是会返回我期待的结果:

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

根据我读过的所有内容,第一个查询应该像我期望的那样工作,但它并没有。没有结果也没有错误。我在这里缺少什么?

1 个答案:

答案 0 :(得分: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的参数(第一个参数除外)。