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

Cách chuyển đổi mảng json thành mảng int postgres trong postgres 9.3

Thiết lập trong câu hỏi sẽ giống như sau:

create table a_table (id int, data json);
insert into a_table values
(1, '{"bookIds": [1,2,3,5], "storeIds": [2,3]}'), 
(2, '{"bookIds": [4,5,6,7], "storeIds": [1,3]}'),
(3, '{"bookIds": [11,12,10,9], "storeIds": [4,3]}');

Lưu ý cú pháp thích hợp của các giá trị json.

Bạn có thể sử dụng hàm json_array_elements()

select id, array_agg(e::text::int)
from a_table, json_array_elements(data->'bookIds') e
group by 1
order by 1;

 id |  array_agg   
----+--------------
  1 | {1,2,3,5}
  2 | {4,5,6,7}
  3 | {11,12,10,9}
(3 rows)    

Sử dụng any() để tìm kiếm một phần tử trong mảng, ví dụ:

select *
from (
    select id, array_agg(e::text::int) arr
    from a_table, json_array_elements(data->'bookIds') e
    group by 1
    ) s
where 
    1 = any(arr) or
    11 = any(arr);

 id |     arr      
----+--------------
  1 | {1,2,3,5}
  3 | {11,12,10,9}
(2 rows)

Đọc thêm về <@ operator .

Bạn cũng có thể tìm kiếm trong mảng json (mà không cần chuyển nó thành mảng int) bằng cách kiểm tra các phần tử của nó, ví dụ:

select t.*
from a_table t, json_array_elements(data->'bookIds') e
where e::text::int in (1, 11);

 id |                     data                      
----+-----------------------------------------------
  1 | {"bookIds" : [1,2,3,5], "storeIds": [2,3]}
  3 | {"bookIds" : [11,12,10,9], "storeIds": [4,3]}
(2 rows)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PSQLException:Tập kết quả này đã bị đóng

  2. Chèn Từ điển Python bằng Psycopg2

  3. Làm cách nào để khôi phục dữ liệu từ vùng chứa Docker đã bị xóa? Làm thế nào để kết nối lại nó với dữ liệu?

  4. Rails postgresql cách đặt mức cô lập giao dịch thành có thể tuần tự hóa

  5. postgresql:enum và ký tự thay đổi, đang cập nhật