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

Postgresql、json配列から特定のキーの値を取得します

    Postgres9.4以降 関数jsonb_array_elements()を使用します 横方向の結合:

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

    アイデアは簡単な関数で実装できます。例:

    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;
    

    Postgres 12+ jsonbパス関数の形で優れた代替手段があります:

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

    Db<>フィドル。

    JSON関数と演算子 の詳細をご覧ください。




    1. 2 つの SQL Server データベースをマージする

    2. WHERE + KEY_Date + ='+date+'を使用したSQLiteException

    3. MySQL:テーブルの主キーを動的に決定する

    4. 挿入と更新を伴うMySQLケース