【问题标题】:PostgreSQL ILIKE on concatinated columns not working连接列上的 PostgreSQL ILIKE 不起作用
【发布时间】:2016-12-04 00:22:03
【问题描述】:

我正在尝试使用 ILIKE 查询 PostgreSQL 中的用户名。有 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%'

根据我所阅读的所有内容,第一个查询应该可以按我的预期工作,但事实并非如此。没有结果,也没有错误。我在这里错过了什么?

【问题讨论】:

    标签: postgresql


    【解决方案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 的参数(第一个参数除外)。

    【讨论】:

    • 你是对的,last_name 为空。我在发布后发现并尝试使用(first_name::text || ' ' || last_name::text) 进行修复,但这也不起作用。您的答案确实有效并返回了预期的结果。谢谢! (一旦允许,我会在 5 分钟内接受)
    猜你喜欢
    • 2015-11-03
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多