在 Postgres 9.4+中 ,可以
jsonb_array_elements()在横向 联接中 使用该函数:
select (elem->>'skillLevel')::int as skill_levelfrom my_tablecross join jsonb_array_elements(json_col) elemwhere elem->>'skillId' = '1';
您可以通过一个简单的函数来实现该想法,例如:
create or replace function extract_skill_level(json_data jsonb, id int)returns integer language sql as $$ select (elem->>'skillLevel')::int from jsonb_array_elements(json_data) elem where elem->>'skillId' = id::text$$;select extract_skill_level(json_col, 1) as skill_levelfrom my_table;
在 Postgres 12+中, 您可以使用jsonb路径函数的形式来替代:
select ( jsonb_path_query( json_col, '$[*] ? (@.skillId == "1")' )->'skillLevel' )::int as skill_levelfrom my_table;
Db
<>提琴。
阅读有关JSON函数和运算符的更多信息。



