13.9 JSON_TRANSFORMの演算子KEEP
JSON_TRANSFORM
の演算子KEEP
は、指定されているどのパス式でも対象となっていない、入力データのすべての部分を削除します。
演算子KEEP
は例外です。つまり、それの後に複数のパス式を続けることができます。これは代入操作ではありません(=
やRHSはありません)。
少なくとも1つのパス式が必要であるため、KEEP
を使用して、何も保持しないように指定することはできません。そのため、KEEP
を使用して最上位のオブジェクトまたは配列を削除することはできません。
例13-17 JSON_TRANSFORM: 特定のフィールドのみを保持
このjson_transform
の結果には、フィールドaとdのみが保持されます。
SELECT json_transform('{"a":1, "b":2, "c":3, "d":4}',
KEEP '$.a', '$.d')
結果:
{"a:1", "d":4}
例13-18 JSON_TRANSFORM: 述語を満たす値があるフィールドのみを保持
この結果では、値が2より大きいフィールドのみが保持されます。ワイルドカード*
によってすべてのフィールドが指定されています。また、述語@>2
により、2
より大きいフィールド値を必要としています。
SELECT json_transform('{"a":1, "b":2, "c":3, "d":4}',
KEEP '$.*?(@ > 2)')
結果:
{"c:3", "d":4}
KEEP
操作の使用は、NESTED PATH
操作内で使用することで有効範囲を限定できます。ネストされたパスで定義されたスコープの外側のデータは、KEEP
プルーニングによる影響を受けません。例13-21ではこれを示しています。
演算子KEEP
で使用できるハンドラは、IGNORE ON MISSING
(デフォルト)、ERROR ON MISSING
です。
関連トピック