我有一个表,其中的标记存储为JSONB列。比如:
id tags
---- ------------------------------
1 ["red", "blue"]
2 ["orange", "light pink"]
3 ["pink", "green"]
我想选择包含与模式部分匹配的标记的行——在我的例子中,我希望标记中包含空格。类似于
SELECT * FROM the_table WHERE tags LIKE '% %'
。将数组转换为文本几乎可以工作,除了所有匹配项之外,因为Postgres在输出JSON的逗号后面放了一个空格。 最佳答案
使用功能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)