2017-10-17 51 views
0

我有一个标签存储为JSONB列的表。如:Postgresql:如何在json数组上执行LIKE查询?

id tags 
---- ------------------------------ 
1 ["red", "blue"] 
2 ["orange", "light pink"] 
3 ["pink", "green"] 

我想选择包含部分匹配模式的标签的行 - 在我的情况下,我希望标签中包含空格。像SELECT * FROM the_table WHERE tags LIKE '% %'之类的东西。将数组转换为文本几乎是行得通的,除了一切都匹配,因为Postgres在输出JSON中的逗号后面放置了空格。

回答

1

使用功能jsonb_array_elements_text().

with my_table(id, tags) as (
values 
    (1, '["red", "blue"]'::jsonb), 
    (2, '["orange", "light pink"]'), 
    (3, '["pink", "green"]') 
) 

select * 
from my_table, jsonb_array_elements_text(tags) 
where value like '% %'; 

id |   tags   | value  
----+--------------------------+------------ 
    2 | ["orange", "light pink"] | light pink 
(1 row)