Postgresql:如何对 json 数组执行 LIKE 查询?
Postgresql: How to perform LIKE query on a json array?
我有一个 table,标签存储为 JSONB 列。喜欢:
id tags
---- ------------------------------
1 ["red", "blue"]
2 ["orange", "light pink"]
3 ["pink", "green"]
我想要 select 包含与模式部分匹配的标签的行 -- 在我的例子中,我想要其中包含 space 的标签。类似于 SELECT * FROM the_table WHERE tags LIKE '% %'
。将数组转换为文本几乎可以工作,除了一切都匹配,因为 Postgres 在输出 JSON.
逗号后放置了 space
使用函数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)
我有一个 table,标签存储为 JSONB 列。喜欢:
id tags
---- ------------------------------
1 ["red", "blue"]
2 ["orange", "light pink"]
3 ["pink", "green"]
我想要 select 包含与模式部分匹配的标签的行 -- 在我的例子中,我想要其中包含 space 的标签。类似于 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)