在PostgreSQL数据库中,我有一个名为的json列json
。内部数据如下所示:
{
"Version": "0.0.0.1",
"Items": [
{
"Id": "40000000-0000-0000-0000-000000141146",
"Name": "apple",
"Score": 64,
"Value": 1430000
},
{
"Id": "40000000-0000-0000-0000-000000141147",
"Name": "grapefruit",
"Score": 58,
"Value": 1190000
},
{
"Id": "40000000-0000-0000-0000-000000141148",
"Name": "mango",
"Score": 41,
"Value": 170000
}
]
}
我想做的是Score
从Items
元素中检索所有数据。
我正在尝试使用SQL代码:
select
substring(json ->> 'Items' from '"Score": (\d*),') as score
from vegetables;
但是,它只返回第一个元素而不是3的分数。我试图使用'\ g'标志,该标志应该全局查找所有结果,但是代码无法正常工作。
有人可以建议如何正确执行此操作吗?提前致谢!
考虑到json
字段的数据类型jsonb
则不需要使用子字符串或正则表达式,只需lateral join
使用即可jsonb_array_elements
为您完成所需的操作。请尝试以下查询。
select x->>'Score' "Score" from vegetables
cross join lateral jsonb_array_elements(json->'Items') x
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句