我试图在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%'
根据我读过的所有内容,第一个查询应该像我期望的那样工作,但它并没有。没有结果也没有错误。我在这里缺少什么?
答案 0 :(得分:1)
评论太长了。
如果last_name
为NULL
,则第一个查询将不返回任何结果(如果first_name
为NULL
,则同样地返回结果。)
所以,试试这个:
WHERE first_name || ' ' || COALESCE(last_name, '') ILIKE '%ryan%'
或:
WHERE CONCAT_WS(' ', first_name, last_name) ILIKE '%ryan%'
concat_ws()
函数忽略不是NULL
的参数(第一个参数除外)。