postgresql 通过在Postgresssql中有条件地循环JSONB记录数组来提取键值对

guykilcj  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(115)

我想写一个查询,它可以在jsonb对象中的字典列表上循环,并提取所有与特定条件匹配的值。该表具有以下结构。
| 组态设定| Configuration |
| --| ------------ |
| 【{...}、{...}、{...}】| [{...}, {...}, {...}] |
| 【{...}、{...}、{...}】| [{...}, {...}, {...}] |
每个uid的字典列表如下所示。

[
  {'insType': 1, 'insMode': 2, 'insOffset': 0.0},
  {'insType': 2, 'insMode': 4, 'insOffset': 1.0},
  {'insType': 2, 'insMode': 5, 'insOffset': 0.0},
  {'insType': 3, 'insMode': 2, 'insOffset': 3.0},
  {'insType': 3, 'insMode': 0, 'insOffset': -1.0},
]

字符串
我想为我所有的唯一ID找到'insType' == 2的'insOffset'。
有没有一种方法可以将其作为查询来执行?

pgx2nnw8

pgx2nnw81#

通过在横向连接中使用JSON processing functions中的jsonb_to_recordset,可以最轻松地完成此操作

SELECT e."uniqueId", c."insOffset"
FROM example e, jsonb_to_recordset(e."Configuration") AS c("insType" int, "insOffset" float)
WHERE c."insType" = 2;

字符串
否则,您可以使用jsonb_array_elements并访问各个属性,分别将它们转换为to floatsto integers

SELECT e."uniqueId", (config ->> 'insOffset')::float AS "insOffset"
FROM example e, jsonb_array_elements(e."Configuration") AS config
WHERE (config ->> 'insType')::int = 2;

相关问题