sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgresql, hämta värde för specifik nyckel från json-arrayen

I Postgres 9.4+ använd funktionen jsonb_array_elements() i en lateral sammanfogning:

select (elem->>'skillLevel')::int as skill_level
from my_table
cross join jsonb_array_elements(json_col) elem
where elem->>'skillId' = '1';

Du kan implementera idén i en enkel funktion, t.ex.:

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;

I Postgres 12+ du har ett bra alternativ i form av jsonb-sökvägsfunktioner:

select (
    jsonb_path_query(
        json_col, 
        '$[*] ? (@.skillId == "1")'
        )->'skillLevel'
    )::int as skill_level
from my_table;

Db<>Fiol.

Läs mer om JSON-funktioner och -operatörer.




  1. Oracle 10g Anslut efter tidigare - Prestandaproblem

  2. PostgreSQL:Vilken datatyp ska användas för valuta?

  3. IP-adress lagrad som decimal - PL/SQL för att visas som prickad quad

  4. Använder AT TIME ZONE för att fixa en gammal rapport