sql >> データベース >  >> RDS >> PostgreSQL

postgres9.3でjson配列をpostgresint配列に変換する方法

    質問の設定は次のようになります:

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

    json値の適切な構文に注意してください。

    関数 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)    
    

    any()を使用します 配列内の要素を検索するには、例:

    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)
    

    <@ operatorについてもお読みください

    要素を調べることで、json配列を(int配列に変換せずに)検索することもできます。例:

    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. 信頼できる接続とは何ですか?

    2. psycopg2.ProgrammingError:\またはその近くの構文エラー

    3. AWSRDSでのMySQLデータベースおよびOracleデータベースでのJDeveloperの使用パート2

    4. 外部キーにリンクされたテーブルをテストする方法は?