【问题标题】:Case insensitive array contains query in Postgres不区分大小写的数组包含 Postgres 中的查询
【发布时间】:2013-09-29 02:31:37
【问题描述】:

我想将{TEST@EXAMPLE.COM}{test@example.com, other@example.com} 匹配

进行区分大小写的查询就足够了:

select * from users where email @> '{test@example.com}'

但是,我找不到对数组列运行不区分大小写的包含查询的方法。

This page 不相信这是可能的,因为没有提到区分大小写。有什么想法吗?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    一个可行的解决方案,但对于较大的表和数组来说会非常很慢是取消嵌套数组并使用 ILIKE(或任何其他不区分大小写的比较):

    select *
    from (
       select id, unnest(email) email_address
       from user
    ) t
    where email_address ILIKE 'test@example.com'
    

    【讨论】:

    • 非常适合按标签对帖子进行分页,在内部选择上使用 LIMIT 和 OFFSET 可以快速执行查询:)
    【解决方案2】:

    我认为你不能直接这样做,因为 postgresql 数组没有不区分大小写的函数。最简单的方法是将数组数据和查询都保留为小写。

    这里有类似的问题:Creating case-insensitive indexes on Postgres string array

    【讨论】:

      猜你喜欢
      • 2017-04-16
      • 2015-08-08
      • 1970-01-01
      • 2023-03-07
      • 2014-03-25
      • 2020-08-20
      • 2012-02-18
      • 2018-06-02
      相关资源
      最近更新 更多