PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgresql, pobierz wartość określonego klucza z tablicy json

W Postgresie 9.4+ użyj funkcji jsonb_array_elements() w połączeniu bocznym:

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

Pomysł możesz zrealizować w prostej funkcji, np.:

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;

W Postgresie 12+ masz fajną alternatywę w postaci funkcji ścieżki jsonb:

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

Db<>Skrzypce.

Przeczytaj więcej o funkcjach i operatorach JSON.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Widoki PostgreSQL:odwoływanie się do jednego pola obliczeniowego w innym polu obliczeniowym

  2. Postgres wstawia lub aktualizuje wyzwalacz WHEN (stary)

  3. docker-compose rails rake db:reset nie powiedzie się, nie można usunąć aktualnie otwartej bazy danych

  4. Dołączyć nazwę tabeli do każdej kolumny w zestawie wyników w SQL? (w szczególności Postgres)

  5. Wyzwalacz Postgresql przy logowaniu użytkownika