我的表有一个jsonb列,以这种格式存储字符串的JSON数组:
["ItemA", "ItemB", "ItemC"]
我正在尝试根据数组中某些项目的数量过滤行,使用通配符作为项目名称的一部分。
从我在这里读到的SO,我可以使用jsonb_to_recordset函数,然后只是正常查询数据,但我不能将这些部分放在一起。
如何使用jsonb_to_recordset来完成此任务?它要求列定义列表,但是如何仅为字符串数组指定一个?
我的假设(但当然无效)查询看起来像这样:
SELECT * FROM mytable, jsonb_to_recordset(mytable.jsonbdata) AS text[] WHERE mytable.jsonbdata LIKE 'Item%'
修改 也许可以使用这样的东西来完成:
SELECT * FROM mytable WHERE jsonbdata ? 'Item%';
答案 0 :(得分:1)
select *
from
mytable t,
jsonb_array_elements_text(jsonbdata) arr(elem)
where elem like 'Item%';
jsonbdata | elem
-----------------------------+-------
["ItemA", "ItemB", "ItemC"] | ItemA
["ItemA", "ItemB", "ItemC"] | ItemB
["ItemA", "ItemB", "ItemC"] | ItemC
(3 rows)
您可能只想选择不同的表行:
select distinct t.*
from
mytable t,
jsonb_array_elements_text(jsonbdata) arr(elem)
where elem like 'Item%';