sql >> Database >  >> RDS >> PostgreSQL

Hoe json-array te converteren naar postgres int-array in postgres 9.3

De opstelling in de vraag zou er als volgt uit moeten zien:

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]}');

Let op de juiste syntaxis van json-waarden.

U kunt de functie json_array_elements() gebruiken

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)    

Gebruik any() om een ​​element in de arrays te zoeken, bijv.:

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)

Lees ook over <@ operator .

U kunt ook zoeken in json-array (zonder het te converteren naar int-array) door de elementen ervan te onderzoeken, bijvoorbeeld:

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. hoe een like-zoekopdracht te maken in postgresql en node js

  2. MySQL Selecteer waar in veel tot veel

  3. De eenvoudigste manier om een ​​Django-project te migreren van MySQL naar PostgreSQL

  4. hoe de database opeenvolgend bij te werken met mysql