PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgresql, ambil nilai untuk kunci tertentu dari json array

Di Postgres 9.4+ gunakan fungsi jsonb_array_elements() dalam gabungan lateral:

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

Anda dapat mengimplementasikan ide dalam fungsi sederhana, misalnya:

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;

Di Postgres 12+ anda memiliki alternatif yang bagus dalam bentuk fungsi jalur jsonb:

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

Db<>Fiddle.

Baca selengkapnya tentang Fungsi dan Operator 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. Mengatur work_mem di Postgres untuk kueri tertentu

  2. postgresql:nilai kunci duplikat kesalahan melanggar batasan unik

  3. Pengkodean karakter (UTF-8) di sesi PowerShell

  4. Menangani PENGECUALIAN dan mengembalikan hasil dari fungsi

  5. Docker membuat layanan postgresql - tidak dapat membuat pengguna dan basis data selama pembuatan?