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

SQLServerでJSONドキュメントから重複キーを返す方法

    JSONドキュメントから値を抽出しようとしているが、同じレベルの1つ以上の値に重複するキーがある場合、 JSON_QUERY()> またはJSON_VALUE()

    これらの関数は両方とも、パスに一致する最初の値のみを返します。

    幸い、別のオプションがあります。

    OPENJSON() 関数は、同じレベルの重複キーからすべての値を返します。

    OPENJSON()を示す例を次に示します。 同じレベルで重複するプロパティを返します。

      DECLARE @json NVARCHAR(4000)=N'{"dog":{"details":{"name": "Fetch"、 "name": "Good Dog"、 "sex": "male "}}}'; SELECT * FROM OPENJSON(@json、' $ .dog.details');  

    結果:

     + ------- + ---------- + -------- + |キー|値|タイプ||-------+ ---------- + -------- ||名前|フェッチ| 1 ||名前|良い犬| 1 ||セックス|男性| 1 | + ------- + ---------- + -------- + 

    この例では、$。dog.detailsのすべての子を返します。 キー。

    この場合、同じレベルに同じ名前の2つのキーがあります( name キー)。

    2つのnameからの値だけを返したい場合 キーの場合、次のようなことができます。

      DECLARE @json NVARCHAR(4000)=N'{"dog":{"details":{"name": "Fetch"、 "name": "Good Dog"、 "sex": "male "}}}'; SELECT value FROM OPENJSON(@json、' $ .dog.details')WHERE [key] ='name';  

    結果:

     + ---------- + |値||----------||フェッチ||良い犬|+---------- + 

    JSON_VALUE() JSON_QUERY()

    前述のように、両方の JSON_VALUE() およびJSON_QUERY() パスに一致する最初の値のみを返します。

    したがって、上記のJSONドキュメントに対してこれらを使用しようとすると、次の結果が得られます。

    JSON_VALUE()

    JSON_VALUE() JSON文字列からスカラー値を返すため、次の結果が返されます。

      DECLARE @json NVARCHAR(4000)=N'{"dog":{"details":{"name": "Fetch"、 "name": "Good Dog"、 "sex": "male "}}}'; SELECT JSON_VALUE(@json、' $ .dog.details.name')AS [JSON_VALUE];  

    結果:

     + -------------- + | JSON_VALUE || -------------- ||フェッチ|+-------------- + 

    JSON_QUERY()

    JSON_QUERY() JSON文字列からオブジェクトまたは配列を抽出するため、次の結果が返されます。

      DECLARE @json NVARCHAR(4000)=N'{"dog":{"details":{"name": "Fetch"、 "name": "Good Dog"、 "sex": "male "}}}'; SELECT JSON_QUERY(@json、' $ .dog.details')AS [JSON_QUERY];  

    結果:

     + -------------- + | JSON_QUERY || -------------- || {"name": "Fetch"、 "name": "Good Dog"、 "sex": "male" + ---- | 

    少なくともJSON_QUERY()では 重複するキーを確認できますが、 OPENJSON()のように個々の値を取得することはできません。 。


    1. MySQL Insert Into Select

    2. MySQLサーバー起動エラー'サーバーはPIDファイルを更新せずに終了しました'

    3. SQL Server(T-SQL)でテーブルのパーティション情報を取得する2つの方法

    4. PostgreSQLのセッションIDに適したランダムな文字列をどのように作成しますか?