如何在 Postgresql 中使用 LIKE 和 ANY?

Posted

技术标签:

【中文标题】如何在 Postgresql 中使用 LIKE 和 ANY?【英文标题】:How to use LIKE with ANY in Postgresql? 【发布时间】:2014-12-15 19:00:54 【问题描述】:

有没有办法对 postgres 中的字符串数组列进行部分字符串匹配?

我正在尝试以下语法,但它没有像我预期的那样工作:

SELECT * FROM example_table WHERE '%partial string' ILIKE ANY(array_column)

有正确的方法吗?

【问题讨论】:

【参考方案1】:
drop table if exists temp_a;
create temp table temp_a as
(
    select array['alpha','beta'] as strings
    union all
    select array['gamma','theta']
);

select * 
from (select unnest(strings) as string from temp_a) as sq 
where string ilike '%eta'

【讨论】:

【参考方案2】:

您需要分别搜索每个下标——这是一个可以解释为包含更多列的示例

SELECT distinct array_column FROM
   (SELECT array_column,
           generate_subscripts(array_column, 1) AS s
      FROM example_table) AS foo
 WHERE array_column[s] like '%partial string';

另类破解:

select * from example_table where array_column::text like '%partial%'

如有必要,您可以修改“部分”以包含左/右括号和引号以更精确。

【讨论】:

【参考方案3】:

刚刚使用array_to_string实现了这个:

SELECT * FROM example_table WHERE array_to_string(array_column) ILIKE '%partial string'

【讨论】:

以上是关于如何在 Postgresql 中使用 LIKE 和 ANY?的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中,如何执行缓解 SQL 注入的 postgresql 'LIKE %name%' 查询?

PostgreSQL LIKE 子句

PostgreSQL LIKE 子句

postgresql----LIKE和SIMILAR TO

postgresql数据库中~和like和ilike的区别

如何提高 PostgreSQL LIKE %text% 查询性能