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