sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql, načte hodnotu pro konkrétní klíč z pole json

V Postgres 9.4+ použijte funkci jsonb_array_elements() v bočním spojení:

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

Nápad můžete implementovat do jednoduché funkce, např.:

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;

V Postgres 12+ máte hezkou alternativu ve formě funkcí cesty jsonb:

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

Db<>Fiddle.

Přečtěte si další informace o funkcích a operátorech JSON.




  1. Implementace indikátoru výkonu SQL Server pro dotazy, uložené procedury a spouštěče

  2. Nejlepší funkce, které je třeba hledat v nástroji pro monitorování serveru SQL

  3. Zdá se, že migrace Rails:Bigint na PostgreSQL selhává?

  4. Obrázky jako odkazy v databázi MySQL?