PSQL:计算JSONB数组中的通配符值的数量

时间:2016-06-15 13:38:56

标签: arrays json postgresql jsonb postgresql-9.5

我的表有一个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%';

1 个答案:

答案 0 :(得分:1)

使用jsonb_array_elements()

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%';