PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Postgresql, truy xuất giá trị cho khóa cụ thể từ mảng json

Trong Postgres 9.4+ sử dụng hàm jsonb_array_elements() trong một phép nối bên:

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

Bạn có thể triển khai ý tưởng trong một chức năng đơn giản, ví dụ:

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;

Trong Postgres 12+ bạn có một giải pháp thay thế hay ở dạng hàm đường dẫn jsonb:

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

Db <> Fiddle.

Đọc thêm về Các hàm và toán tử 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. Postgis + boost ::hình học + C ++

  2. Kết hợp các câu lệnh INSERT trong một CTE sửa đổi dữ liệu với một biểu thức CASE

  3. Quy tắc ngoặc đơn của PostgreSQL, có hướng dẫn tóm tắt không?

  4. Công thức hệ số tương quan Pearson trong SQL

  5. Lưu trữ khoảng thời gian trong PostgreSQL từ Rails