Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何从jsonb数组postgres中提取?_Postgresql_Jsonb - Fatal编程技术网

Postgresql 如何从jsonb数组postgres中提取?

Postgresql 如何从jsonb数组postgres中提取?,postgresql,jsonb,Postgresql,Jsonb,我的一列包含以下数组。我只需要订单代码。我该怎么做 供应商提供的数据 {供应商数据:[{订单id:10000,发货id:20000,订单查找代码:fr\U 30000dd}] 我假设供应商提供的数据是您的jsonb列。 此查询将返回表装运的所有记录,并选择订单\查找\代码 选择jsonb_数组_元素供应商提供的_数据->供应商数据->订单查找代码 从…起 运输 哪里 1=1如果需要多个列,则每列需要一个表达式,例如 select vendor_provided_data #>> '{

我的一列包含以下数组。我只需要订单代码。我该怎么做

供应商提供的数据 {供应商数据:[{订单id:10000,发货id:20000,订单查找代码:fr\U 30000dd}]
我假设供应商提供的数据是您的jsonb列。 此查询将返回表装运的所有记录,并选择订单\查找\代码

选择jsonb_数组_元素供应商提供的_数据->供应商数据->订单查找代码 从…起 运输 哪里
1=1

如果需要多个列,则每列需要一个表达式,例如

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'

如果多行都可以,那么可以使用jsonb_数组_元素


如果数组包含多个元素,是否要在结果中包含多行?否。最好只在其旁边的另一列中显示元素的顺序。\u lookup\u code是否有元素数的上限?SQL查询中不能有动态列。因此,您需要使用预定义的列数编写查询选择供应商提供的数据>>“{vendor\u data,0,order\u lookup\u code}”作为代码,这是有效的!我只需要在订单查找代码中使用双引号。Postgres给了我一个语法错误。非常感谢。
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)
select jsonb_path_query_array(vendor_provided_data, '$.vendor_data[*].order_lookup_code') as all_codes
from the_table