PostgreSQL:使用 LIKE、ANY 和通配符的 Where 子句
问题:PostgreSQL:使用 LIKE、ANY 和通配符的 Where 子句 我有一个包含字符串数组的字段的表(类型是character varying(255)[])。 我想将给定字符串与通配符(例如'query%')与该字段的任何元素进行比较。 此请求有效并返回预期结果: SELECT * FROM my_table WHERE 'query' ILIKE ANY(my_field) 但是
·
问题:PostgreSQL:使用 LIKE、ANY 和通配符的 Where 子句
我有一个包含字符串数组的字段的表(类型是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。
解答
您必须取消嵌套数组字段:
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)
更多推荐
已为社区贡献19912条内容
所有评论(0)