sql >> データベース >  >> RDS >> SQLite

オペレーター

    SQLiteでは、->> オペレーターはJSONドキュメントからサブコンポーネントを抽出し、そのサブコンポーネントのSQL表現を返します。

    ->> 演算子は、SQLiteバージョン3.38.0(2022年2月22日にリリース)で最初に導入されました。

    構文

    構文は次のようになります:

    json ->> path

    json JSONドキュメントとpath 抽出するサブコンポーネントへのパスです。

    そのため、オペレーターの左側にJSONドキュメントを提供し、その右側に抽出するパスを指定します。

    ->> 演算子は常に、指定されたサブコンポーネントのSQL表現を返します。 JSON表現を返すには、->を使用します 代わりに演算子。

    ->>の簡単な例を次に示します。 演算子は機能します:

    SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$';

    結果:

    {"name":"Wag","type":"Dog"}

    この場合、'$'のパスを指定しました ドキュメント全体を返します。

    別のパスを指定しましょう:

    SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type';

    結果:

    Dog

    次のように、ドル記号とピリオドを完全に省略することもできます。

    SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'type';

    結果:

    Dog

    これは、より大きなJSONドキュメントです:

    SELECT '[
            { 
            "user" : "Spike",
            "age" : 30,
            "scores" : [ 9, 7, 3 ]
            },
            { 
            "user" : "Faye",
            "age" : 25,
            "scores" : [ 90, 87, 93 ]
            },
            { 
            "user" : "Jet",
            "age" : 40,
            "scores" : [ 50, 38, 67 ]
            }
            ]' ->> '$[0]';

    結果:

    {"user":"Spike","age":30,"scores":[9,7,3]}

    SQLiteでは、配列はゼロベースであるため、 [0]を指定します 最初の配列要素を返します。

    そのユーザーのスコアのみを取得したい場合は、次のようにすることができます:

    SELECT '[
            { 
            "user" : "Spike",
            "age" : 30,
            "scores" : [ 9, 7, 3 ]
            },
            { 
            "user" : "Faye",
            "age" : 25,
            "scores" : [ 90, 87, 93 ]
            },
            { 
            "user" : "Jet",
            "age" : 40,
            "scores" : [ 50, 38, 67 ]
            }
            ]' ->> '$[0].scores';

    結果:

    [9,7,3]

    さらに深く掘り下げて、特定のスコアを抽出することができます:

    SELECT '[
            { 
            "user" : "Spike",
            "age" : 30,
            "scores" : [ 9, 7, 3 ]
            },
            { 
            "user" : "Faye",
            "age" : 25,
            "scores" : [ 90, 87, 93 ]
            },
            { 
            "user" : "Jet",
            "age" : 40,
            "scores" : [ 50, 38, 67 ]
            }
            ]' ->> '$[0].scores[1]';

    結果:

    7

    存在しないパス

    パスがJSONに存在しない場合は、null値が返されます:

    SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.age';

    結果:

    null

    SQLiteでは、 .nullvalueを使用できることに注意してください null値が返されるたびに出力する文字列を指定します。私の場合、以前に次のコマンドを実行していました:

    .nullvalue null

    これは、テキスト nullを指定します null値が返されるたびに出力する必要があります。そのため、上記の例では nullというテキストが出力されます。 。これを行わなかった場合、結果は空白になっている可能性があります。

    無効なJSON

    最初の引数が有効なJSONでない場合、エラーがスローされます:

    SELECT '{ "name" }' ->> '$';

    結果:

    Runtime error: malformed JSON

    無効なパス

    また、2番目の引数が有効なパスでない場合は、エラーがスローされます。

    SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$name';

    結果:

    Runtime error: JSON path error near 'name'

    この場合、終止符()を含めるのを忘れました。 )ドル記号の間( $ )および name

    ただし、前述のように、ドル記号を省略してピリオドを完全に停止することは可能です。

    SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'name';

    結果:

    Wag

    1. AzureSQLマネージドインスタンスのパフォーマンスに関する考慮事項

    2. ODBC呼び出しがストアドプロシージャで失敗しました-クエリをパススルーします

    3. 集計関数を使用してMySQLクエリでグループ化されたレコードの最初と最後のレコードをフェッチするにはどうすればよいですか?

    4. データベースの制約とは何ですか?