テーブル スキーマ:
create table test_table
(
id serial not null,
data jsonb
);
サンプルデータ:
INSERT INTO public.test_table (id, data) VALUES (1, '[{"": "VALUE1", "KEY2": "VALUE2"}, {"KEY1": "VALUE3", "KEY3": "VALUE4"}]');
INSERT INTO public.test_table (id, data) VALUES (2, '[{"''KEY1 ''": "VALUE1", "KEY2": "VALUE2"}, {"KEY3": "VALUE3", "KEY4": "VALUE4"}]');
SQL クエリ:
SELECT id, arr_elem
FROM test_table AS tt, jsonb_array_elements(
(
SELECT data
FROM test_table
WHERE id = tt.id
)
) AS arr_elem
WHERE arr_elem#>'{KEY1}' IS NOT NULL
次のシナリオに一致するように上記のクエリを調整したいと思います。
- 空の文字列を持つキーを見つけます: 例:
"": "VALUE1"
- 一重引用符だけでキーを見つけます: 例:
"''": "VALUE1"
- 単一引用符で囲まれた末尾のスペースを持つキーを見つけます: 例:
"'KEY1 '": "VALUE1"
引用符とスペースをエスケープしようとしましたが、クエリは期待した結果を返しませんでした。
更新 1:
1の解決策: http://sqlfiddle.com/#!17/6d431/20
SELECT id, arr_elem
FROM test_table AS tt, jsonb_array_elements(
(
SELECT data
FROM test_table
WHERE id = tt.id
)
) AS arr_elem
WHERE arr_elem->'' IS NOT NULL