PostgreSQL json配列内で条件を満たしている値を取得する
- 作成日 2022.12.07
- PostgreSQL
- PostgreSQL
PostgreSQLで、json配列内で条件を満たしている値を取得する手順を記述してます。「jsonb_path_query」に条件を指定することで可能です。jsonデータにも使用することができます。
環境
- OS CentOS Stream release 9
- PostgreSQL 15.1
- pgadmin4 6.16
json配列内で条件を満たしている値を取得
json配列内で条件を満たしている値を取得するには、「jsonb_path_query」を使用します。
jsonb_path_query(json配列,条件);
※条件に一致する値がなければ「null」が返ります。
実際に、実行してみます。
SELECT
jsonb_path_query('[1, 2, 3, 4, 5]', '$[*] ? (@ > 3)'),
jsonb_path_query('[1, 2, 3, 4, 5]', '$[*] ? (@ > 5)');
実行結果をみると、取得されていることが確認できます。
以下のように複数条件を指定することも可能です。
SELECT
jsonb_path_query('[1, 2, 3, 4, 5]', '$[*] ? (@ > 3 && @ < 5)'),
jsonb_path_query('[1, 2, 3, 4, 5]', '$[*] ? (@ > 2 && @ < 6)');
実行結果
変数にjsonを使用
変数に「json」データを使用することも可能です。
SELECT
jsonb_path_query('
[1, 2, 3, 4, 5]', '$[*] ? (@ > $x && @ < $y)',
'{"x": 2, "y": 4}'),
jsonb_path_query('
[1, 2, 3, 4, 5]', '$[*] ? (@ > $x && @ < $y)',
'{"x": 2, "y": 6}');
実行結果
jsonデータ
jsonデータに対しても使用することは可能です。
SELECT
jsonb_path_query('{"x": 1, "y": 2, "z": 3}', '$.* ? (@ > 1)'),
jsonb_path_query('{"x": 1, "y": 2, "z": 3}', '$.* ? (@ > 5)');
実行結果
結果を配列で取得
結果を配列として取得したい場合は「jsonb_path_query_array」を使用します。
SELECT
jsonb_path_query_array('[1, 2, 3, 4, 5]', '$[*] ? (@ > 3)'),
jsonb_path_query_array('[1, 2, 3, 4, 5]', '$[*] ? (@ > 5)');
実行結果
-
前の記事
AppleScript ダイヤログを表示する 2022.12.07
-
次の記事
kotlin 「do while」文を使用する 2022.12.07
コメントを書く