我想要每个用户的行格式的 jsonb 输出。如果用户有 2 个主题,则应为该用户创建 2 行。在某些 JSON 中,会出现
certidate
。如果 certidate
不存在,则应将 createdOn
用作输出中的证书日期。
我的桌子如下所示:-
create table rewards
(
id serial primary key,
userid varchar(50),
details jsonb
);
表中的详情栏有以下记录
JSON1
[
{
"score": 80,
"createdOn": 1664494754585,
"subject": "Math"
}
]
JSON2
[
{
"score": 70,
"certidate": 1664494754515,
"subject": "Science"
}
]
JSON3
[
{
"score": 85,
"certidate": 1664494754250,
"subject": "Science"
"score2": 85,
"certidate2": 1664494754250,
"subject2": "Math"
}
]
输出应以以下格式显示:-
id | userid | subject | certificate_date
我知道 jsonb_array_elements 可能可以解决问题,但我什至看不到以下查询的任何行:-
SELECT *
FROM rewards r,
jsonb_array_elements(r.details->'createdOn') as createdOn;
所有 json 看起来都像 1 元素表,因此您可以更改 json 格式或要求表的第一个元素
select *,createdOn.value->'createdOn' from rewards r, jsonb_array_elements(r.details) as createdOn;
要从第一个元素表中获取值,您可以使用
select details->0->'createdOn' from rewards r;