我的一列包含以下数组。我只需要 order_lookup_code。我该怎么做?
vendor_provided_data |
---|
{"vendor_data": [{"order_id": 10000, "shipment_id": 20000, "order_lookup_code": "fr_30000dd"}]} |
答案 0 :(得分:0)
我假设 vendor_provided_data 是您的 jsonb 列。 此查询将返回您选择 order_lookup_code 的所有表装运记录。
选择jsonb_array_elements(vendor_provided_data->'vendor_data')->>'order_lookup_code' order_lookup_code 从 运输 在哪里 1 = 1
答案 1 :(得分:0)
如果需要多列,则每列需要一个表达式,例如
select vendor_provided_data #>> '{vendor_data, 0, order_lookup_code}' as code_1,
vendor_provided_data #>> '{vendor_data, 1, order_lookup_code}' as code_2,
vendor_provided_data #>> '{vendor_data, 2, order_lookup_code}' as code_3,
...
from the_table
#>>
运算符从 JSON 值中提取“嵌套”元素,沿着“路径”,其中数组的每个元素指定路径中的一个步骤。使用多个 ->
运算符可以实现相同的目的。 {vendor_data, 0, 'order_lookup_code'}
相当于 -> 'vendor_data' -> 0 -> 'order_lookup_code'
如果多行都OK,可以使用jsonb_array_elements()
select t.id, --<< whatever columns you want from the table
vd.item ->> 'order_lookup_code' as lookup_code
from the_table t
cross join jsonb_array_elements(t.vendor_provided_data -> 'vendor_data') as vd(item)
如果您使用的是 Postgres 12 或更高版本,则可以将所有代码提取为单个 JSON 数组:
select jsonb_path_query_array(vendor_provided_data, '$.vendor_data[*].order_lookup_code') as all_codes
from the_table