我有一个表,其中包含一个包含字符串数组的字段(类型为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。
答案 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%’)