PostgreSQL json配列内で条件を満たしている値を配列として取得する
- 作成日 2022.12.09
- PostgreSQL
- PostgreSQL

PostgreSQLで、json配列内で条件を満たしている値を配列として取得する手順を記述してます。「jsonb_path_query_array」に条件を指定することで可能です。jsonデータにも使用することができます。
環境
- OS CentOS Stream release 9
- PostgreSQL 15.1
- pgadmin4 6.16
json配列内で条件を満たしている値を取得
json配列内で条件を満たしている値を取得するには、「jsonb_path_query_array」を使用します。
jsonb_path_query_array(json配列,条件);
※条件に一致する値がなければ「空の配列」が返ります。
実際に、実行してみます。
SELECT
jsonb_path_query_array('[1, 2, 3, 4, 5]', '$[*] ? (@ > 3)'),
jsonb_path_query_array('[1, 2, 3, 4, 5]', '$[*] ? (@ > 4)'),
jsonb_path_query_array('[1, 2, 3, 4, 5]', '$[*] ? (@ > 5)');
実行結果をみると、取得されていることが確認できます。

以下のように複数条件を指定することも可能です。
SELECT
jsonb_path_query_array('[1, 2, 3, 4, 5]', '$[*] ? (@ > 3 && @ < 5)'),
jsonb_path_query_array('[1, 2, 3, 4, 5]', '$[*] ? (@ > 2 && @ < 6)');
実行結果

変数にjsonを使用
変数に「json」データを使用することも可能です。
SELECT
jsonb_path_query_array('
[1, 2, 3, 4, 5]', '$[*] ? (@ > $x && @ < $y)',
'{"x": 2, "y": 4}'),
jsonb_path_query_array('
[1, 2, 3, 4, 5]', '$[*] ? (@ > $x && @ < $y)',
'{"x": 2, "y": 6}');
実行結果

jsonデータ
jsonデータに対しても使用することは可能です。
SELECT
jsonb_path_query_array('{"x": 1, "y": 2, "z": 3}', '$.* ? (@ > 1)'),
jsonb_path_query_array('{"x": 1, "y": 2, "z": 3}', '$.* ? (@ > 5)');
実行結果

結果を行で取得
結果を行として取得したい場合は「jsonb_path_query」を使用します。条件が存在しない場合は「null」が返ります。
SELECT
jsonb_path_query('[1, 2, 3, 4, 5]', '$[*] ? (@ > 3)'),
jsonb_path_query('[1, 2, 3, 4, 5]', '$[*] ? (@ > 5)');
実行結果

-
前の記事
python 数値に区切りをつけて使用する 2022.12.09
-
次の記事
kotlin 「for in」で配列の値を全て抽出する 2022.12.09
コメントを書く