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

PSQL: Count number of wildcard values in JSONB array

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

使用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 仅不同的 table 行:

select distinct t.*
from 
    mytable t, 
    jsonb_array_elements_text(jsonbdata) arr(elem)
where elem like 'Item%';