2017-01-27 4 views
0

OracleデータベースにいくつかのJSONが格納されている問題があり、そこから値を抽出する必要があります。複数のノードが同じ名前を共有しているときにOracle SQLでJSON_VALUEを取得

問題は、いくつかのフィールドが重複していることです。

私はこれをしようとするとオプションの配列で唯一のファーストネームキーがあるので、それは動作します:

SELECT 
    JSON_VALUE('{"increment_id":"2500000043","item_id":"845768","options":[{"firstname":"Kevin"},{"lastname":"Test"}]}', '$.options.firstname') AS value 
    FROM DUAL; 

「ケビン」を返します。

はしかし、ファーストネームのフィールドのための2つの値がある場合:

SELECT JSON_VALUE('{"increment_id":"2500000043","item_id":"845768","options":[{"firstname":"Kevin"},{"firstname":"Okay"},{"lastname":"Test"}]}', '$.options.firstname') AS value 
    FROM DUAL; 

はそれだけでNULLを返します。

「firstname」の最初の出現をこのコンテキストで選択する方法はありますか?

答えて

1

JSON_VALUEは、JSONデータから1つのSQL VALUE(またはキーが存在しない場合はSQL NULL)を返します。

値のコレクション(JSON配列)を持っている場合は、JavaScriptのように配列の添字(大括弧)を使用する配列の1つの特定の項目が必要です(例:[2])。 [0]は最初の項目を選択します。 例の最初の配列項目を取得するには、パス式を '$ .options.firstname'から '$ .options [0] .firstname'に変更する必要があります

関連する問題