我有一个表,其中的标记存储为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)

07-24 15:47