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

OPENJSON、JSON_QUERY、およびJSON_VALUE(SQL Server)を使用するときに特殊文字を含むJSONキーを参照する方法

    OPENJSON()などのT-SQL関数を使用している場合 、JSON_QUERY() 、またはJSON_VALUE() 、操作しているJSONドキュメントに含まれている可能性のある英数字以外の文字に注意する必要があります。特に、これらの特殊文字がキー名に含まれていて、それらのキー名を参照する必要がある場合。

    たとえば、スペースを含むキー名を設定できます("first name"など)。 )、またはドル記号($

    幸い、そのようなキーを参照するときはいつでも、キー名を二重引用符で囲むことができます。

    例1– OPENJSON()

    OPENJSON()を使用するときに、名前にスペースが含まれるキーを参照する例を次に示します。 。

    DECLARE @json NVARCHAR(4000) = N'{
            "contact details" : {
                "client id" : 1, 
                "work phone" : "+61 987 902 029"
            }
        }';
    SELECT * FROM OPENJSON(@json, '$."contact details"');

    結果:

    +------------+-----------------+--------+
    | key        | value           | type   |
    |------------+-----------------+--------|
    | client id  | 1               | 2      |
    | work phone | +61 987 902 029 | 1      |
    +------------+-----------------+--------+

    別の例を次に示します。今回は、キー名にドル記号があります。

    DECLARE @json NVARCHAR(4000) = N'{
            "$ per hour" : {
                "normal rate" : 80, 
                "overtime" : 160 
            }
        }';
    SELECT * FROM OPENJSON(@json, '$."$ per hour"');

    結果:

    +-------------+---------+--------+
    | key         | value   | type   |
    |-------------+---------+--------|
    | normal rate | 80      | 2      |
    | overtime    | 160     | 2      |
    +-------------+---------+--------+

    例2– JSON_QUERY()

    JSON_QUERY()を使用した例を次に示します。 。

    DECLARE @json NVARCHAR(4000) = N'{
            "contact details" : {
                "client id" : 1, 
                "work phone" : "+61 987 902 029"
            }
        }';
    SELECT JSON_QUERY(@json, '$."contact details"');

    結果:

    +--------------------+
    | (No column name)   |
    |--------------------|
    | {
                "client id" : 1, 
                "work phone" : "+61 987 902 029"
            }                    |
    +--------------------+

    そして、ここにドル記号が付いています。

    DECLARE @json NVARCHAR(4000) = N'{
            "$ per hour" : {
                "normal rate" : 80, 
                "overtime" : 160 
            }
        }';
    SELECT JSON_QUERY(@json, '$."$ per hour"');

    結果:

    +--------------------+
    | (No column name)   |
    |--------------------|
    | {
                "normal rate" : 80, 
                "overtime" : 160 
            }                    |
    +--------------------+

    例3– JSON_VALUE()

    この例では、JSON_VALUE()を使用しています 。

    DECLARE @json NVARCHAR(4000) = N'{
            "contact details" : {
                "client id" : 1, 
                "work phone" : "+61 987 902 029"
            }
        }';
    SELECT JSON_VALUE(@json, '$."contact details"."work phone"');

    結果:

    +--------------------+
    | (No column name)   |
    |--------------------|
    | +61 987 902 029    |
    +--------------------+

    そして、ここにドル記号が付いています。

    DECLARE @json NVARCHAR(4000) = N'{
            "$ per hour" : {
                "normal rate" : 80, 
                "overtime" : 160 
            }
        }';
    SELECT JSON_VALUE(@json, '$."$ per hour"."normal rate"') AS [Normal Rate];

    結果:

    +---------------+
    | Normal Rate   |
    |---------------|
    | 80            |
    +---------------+

    1. SQL TRUNCATE構文–DBMSによってリストされています

    2. エンティティフレームワークにID列を挿入させるにはどうすればよいですか?

    3. ロックとパフォーマンス

    4. SQL Serverは、最新の値のみを使用して個別の行を選択します