PostgreSQL:Where子句使用LIKE,ANY和通配符

时间:2016-10-28 13:15:05

标签: postgresql

我有一个表,其中包含一个包含字符串数组的字段(类型为character varying(255)[])。

我想将给定字符串与通配符(例如'query%')比较到此字段的任何元素。

此请求有效并取回预期结果:

SELECT * FROM my_table WHERE 'query' ILIKE ANY(my_field)

但是使用通配符,我没有得到任何结果:

SELECT * FROM my_table WHERE 'query%' ILIKE ANY(my_field)

我认为原因是仅在ILIKE运算符的右侧支持通配符,但ANY(my_field)也必须在运算符之后。

有没有办法达到我想要的目的?

使用PostgreSQL 9.5。

2 个答案:

答案 0 :(得分:2)

您必须取消数组字段:

with my_table(my_field) as (
values
    (array['query medium', 'large query']),
    (array['large query', 'small query'])
)
select t.* 
from my_table t,
lateral unnest(my_field) elem
where elem ilike 'query%';

            my_field            
--------------------------------
 {"query medium","large query"}
(1 row)

答案 1 :(得分:1)

使用unnest()将数组转换为set并使用EXIST子句

SELECT * FROM my_table t WHERE  EXISTS (SELECT unnest(t.my_field) AS f WHERE f ILIKE ‘query%’)