gpt4 book ai didi

arrays - 如何提取 JSONB 数组的元素?

转载 作者:行者123 更新时间:2023-11-29 13:13:06 25 4
gpt4 key购买 nike

运行 PostgresSQL v10.5。

在我的表 table_a 中,有一列 metadatajsonb 类型。

它有一个 JSON 数组作为它的键之一array_key,其值如下所示:

[{"key1":"value11", "key2":"value21", "key3":"value31"}, 
{"key1":"value21", "key2":"value22", "key3":"value23"}]

这就是我查询这个键的方式

SELECT metadata->>'array_key' from table_a

这给了我整个数组。有什么方法可以只查询选定的键并格式化它们吗?

数组的类型是文本,即 pg_typeof(metadata->>'array_key')text

理想的输出是

"value11, value13", "value21, value23"

最佳答案

使用jsonb_array_elements()获取可以通过键过滤的数组元素(作为 value):

select value->>'key1' as key1, value->>'key3' as key3
from table_a
cross join jsonb_array_elements(metadata->'array_key');

key1 | key3
---------+---------
value11 | value31
value21 | value23
(2 rows)

使用聚合将输出作为每行的单个值,例如:

select string_agg(concat_ws(', ', value->>'key1', value->>'key3'), '; ')
from table_a
cross join jsonb_array_elements(metadata->'array_key')
group by id;

string_agg
------------------------------------
value11, value31; value21, value23
(1 row)

Working example in rextester.

关于arrays - 如何提取 JSONB 数组的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52402751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com