Ali*_*nik 4 sql postgresql jsonb
我有Postgres JSONB对象数组,看起来像这样:
'[
{
"skillId": "1",
"skillLevel": 42
},
{
"skillId": "2",
"skillLevel": 41
}
]'
Run Code Online (Sandbox Code Playgroud)
这个JSONB是一个函数参数.
什么是检索最有效的方式skillLevel进行 skillId = "1".
我试过玩,jsonb_array_elements但到目前为止我所做的一切看起来都非常混乱.
with my_table(data) as (
values
('[
{
"skillId": "1",
"skillLevel": 42
},
{
"skillId": "2",
"skillLevel": 41
}
]'::jsonb)
)
select elem->>'skillLevel' as skill_level
from my_table
cross join jsonb_array_elements(data) elem
where elem->>'skillId' = '1';
skill_level
-------------
42
(1 row)
Run Code Online (Sandbox Code Playgroud)
以上似乎是最简单的方法,你可以在一个函数中使用这个想法,例如:
create or replace function extract_skill_level(data jsonb, id int)
returns integer language sql as $$
select (elem->>'skillLevel')::int
from jsonb_array_elements(data) elem
where elem->>'skillId' = id::text
$$;
select extract_skill_level
('[
{
"skillId": "1",
"skillLevel": 42
},
{
"skillId": "2",
"skillLevel": 41
}
]', 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3021 次 |
| 最近记录: |