我有一个细节表,其中的 adeet 列定义为 jsonb[] 。
adeet列中存储的示例值如下图所示。
样本数据存储在DB中。
我想返回满足以下条件的行。id=26088
即行 1
和 3
我已经尝试了数组操作和json操作,但它并没有按照要求工作。有什么好的建议吗?
很明显,该列的类型是 adeet
不属 JSON
JSONB
但也许 VARCHAR
我们应该固定格式,以便将其转换为 JSONB
型。我用的是 replace()
和 r
ltrim()
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
你想把JSONB的 <@
操作符与通用数组ANY构造。
select * from foobar where '{"id":26088}' <@ ANY (adeet);