【发布时间】:2021-02-16 13:52:00
【问题描述】:
我有一个 Postgres 表,其中包含一个 KPI 字段,其中包含一个 JSON 对象。它包含一年中每周的数据。我想返回本周包含的值,在本例中为 w5,它始终是 JSON 中的最后一项。
从 KPI 字段中提取
{
"details":{
"w52":{
"sales-goal":96.0,
"sales":81.2,
"forecast-goal":96.0,
"forecast":83.6
},
"w3":{
"sales-goal":96.0,
"sales":85.8,
"forecast-goal":96.0,
"forecast":85.7
},
"w4":{
"sales-goal":96.0,
"sales":86.3,
"forecast-goal":96.0,
"forecast":86.1
},
"w5":{
"sales-goal":96.0,
"sales":86.6,
"forecast-goal":96.0,
"forecast":86.0
}
}
}
这是我的 SQL
SELECT
kpi->'details'::json #>>(json_array_length(col->'details'::json)-1)#>> '{sales-goal}'::text[] as Sales Goal,
kpi->'details'::json #>>(json_array_length(col->'details'::json)-1)#>> '{sales}'::text[] as Sales
FROM areas
我收到以下错误消息:
ERROR: invalid input syntax for type json Detail: Token "details" is invalid. Position: 14 Where: JSON data, line 1: details
我正在尝试得到这个结果。
Sales Goal | Sales
-----------------+------------------------
96.0 | 86.6
【问题讨论】:
-
你没有数组,所以
jsonb_array_length()将无法开始工作。如果您知道w5是您要查找的内容,请使用kpi #>> '{details,w5,sales}'
标签: sql json postgresql