9.4+ पोस्ट करें . में फ़ंक्शन का उपयोग करें jsonb_array_elements()
लेटरल जॉइन में:
select (elem->>'skillLevel')::int as skill_level
from my_table
cross join jsonb_array_elements(json_col) elem
where 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_level
from my_table;
पोस्टग्रेज 12+ . में आपके पास jsonb पथ फ़ंक्शन के रूप में एक अच्छा विकल्प है:
select (
jsonb_path_query(
json_col,
'$[*] ? (@.skillId == "1")'
)->'skillLevel'
)::int as skill_level
from my_table;
JSON फंक्शन्स और ऑपरेटर्स के बारे में और पढ़ें।