从postgres表中获取包含在jsonb[]列中的特定id的行。

问题描述 投票:0回答:1

我有一个细节表,其中的 adeet 列定义为 jsonb[] 。

adeet列中存储的示例值如下图所示。

样本数据存储在DB中。

enter image description here

我想返回满足以下条件的行。id=26088 即行 13

我已经尝试了数组操作和json操作,但它并没有按照要求工作。有什么好的建议吗?

postgresql jsonb postgresql-9.5
1个回答
0
投票

很明显,该列的类型是 adeet 不属 JSONJSONB但也许 VARCHAR 我们应该固定格式,以便将其转换为 JSONB 型。我用的是 replace()rltrim() funcitons来进行这种转换,并倾向于导出一个数组,以便使用 jsonb_array_elements() 功能。

WITH t(jobid,adeet) AS
(
 SELECT jobid, replace(replace(replace(adeet,'\',''),'"{','{'),'}"','}')   
   FROM tab 
), t2 AS
(
SELECT jobid, ('['||rtrim(ltrim(adeet,'{'), '}')||']')::jsonb as adeet 
  FROM t
)
SELECT t.*
  FROM t2 t
 CROSS JOIN jsonb_array_elements(adeet) j
 WHERE (j.value ->> 'id')::int = 26088

演示


0
投票

你想把JSONB的 <@ 操作符与通用数组ANY构造。

select * from foobar where '{"id":26088}' <@ ANY (adeet);
© www.soinside.com 2019 - 2024. All rights reserved.