JSON_VALUE (TRANSACT-SQL)JSON_VALUE (Transact-SQL)

このトピックの対象: ○SQL Server (2016 以降)○Azure SQL Database×Azure SQL Data Warehouse ×Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

JSON 文字列からには、スカラー値を抽出します。Extracts a scalar value from a JSON string.

スカラー値ではなく、JSON 文字列からオブジェクトまたは配列を抽出する、次を参照してください。 JSON_QUERY & #40 です。TRANSACT-SQL と #41 です。.To extract an object or an array from a JSON string instead of a scalar value, see JSON_QUERY (Transact-SQL). 間の相違点についてJSON_VALUEJSON_QUERYを参照してくださいJSON_VALUE の比較と JSON_QUERYです。For info about the differences between JSON_VALUE and JSON_QUERY, see Compare JSON_VALUE and JSON_QUERY.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

JSON_VALUE ( expression , path )  

引数Arguments

式 (expression)expression
式。An expression. 通常、変数またはを JSON テキストを含む列の名前。Typically the name of a variable or a column that contains JSON text.

場合JSON_VALUE JSON では無効ですが見つかったで識別される値を検索する前にパスエラーを返します。If JSON_VALUE finds JSON that is not valid in expression before it finds the value identified by path, the function returns an error. 場合 *JSON_VALUEで識別される値が検出されないパス, テキスト全体をスキャンし、JSON を検出した場合にエラーを返しますが、任意の場所で無効です。If *JSON_VALUE doesn't find the value identified by path, it scans the entire text and returns an error if it finds JSON that is not valid anywhere in expression.

パスpath
抽出するプロパティを指定する JSON のパス。A JSON path that specifies the property to extract. 詳細については、次を参照してください。 JSON パス式 & #40 です。SQL Server ).For more info, see JSON Path Expressions (SQL Server).

SQL Server vNextSQL Server vNextし、 Azure SQL データベースAzure SQL Database、変数の値として使用できるパスです。In SQL Server vNextSQL Server vNext and in Azure SQL データベースAzure SQL Database, you can provide a variable as the value of path.

場合の形式パスが有効でないJSON_VALUEはエラーを返します。If the format of path isn't valid, JSON_VALUE returns an error .

戻り値Return Value

型 nvarchar (4000) の 1 つのテキスト値を返します。Returns a single text value of type nvarchar(4000). 返される値の照合順序は、入力された式の照合順序と同じです。The collation of the returned value is the same as the collation of the input expression.

値が 4,000 文字を超える場合は。If the value is greater than 4000 characters:

  • 厳密でないモード、 JSON_VALUEは null を返します。In lax mode, JSON_VALUE returns null.

  • 厳格モードでJSON_VALUEはエラーを返します。In strict mode, JSON_VALUE returns an error.

    返すスカラー値が 4,000 文字を超えていれば使用OPENJSONの代わりにJSON_VALUEです。If you have to return scalar values greater than 4000 characters, use OPENJSON instead of JSON_VALUE. 詳細については、「 OPENJSON (Transact-SQL)」をご覧ください。For more info, see OPENJSON (Transact-SQL).

解説Remarks

厳密でないモードと厳格モードLax mode and strict mode

次の JSON テキストを考慮してください。Consider the following JSON text:

DECLARE @jsonInfo NVARCHAR(MAX)

SET @jsonInfo=N'{  
     "info":{    
       "type":1,  
       "address":{    
         "town":"Bristol",  
         "county":"Avon",  
         "country":"England"  
       },  
       "tags":["Sport", "Water polo"]  
    },  
    "type":"Basic"  
 }'  

次の表の動作を比較してJSON_VALUE厳密でないモードでは厳格モードでします。The following table compares the behavior of JSON_VALUE in lax mode and in strict mode. 省略可能なパス モードの仕様 (lax または strict) に関する詳細については、次を参照してください。 JSON パス式 & #40 です。SQL Server ).For more info about the optional path mode specification (lax or strict), see JSON Path Expressions (SQL Server).

[パス]Path 厳密でないモードでの戻り値Return value in lax mode 厳格モードでの戻り値Return value in strict mode 詳細More info
$ NULLNULL [エラー]Error スカラー値ではありません。Not a scalar value.

使用してJSON_QUERY代わりにします。Use JSON_QUERY instead.
$info.type。$.info.type N '1'N'1' N '1'N'1' 該当なしN/a
$info.address.town。$.info.address.town N'Bristol'N'Bristol' N'Bristol'N'Bristol' 該当なしN/a
$ .info。"アドレス$.info."address" NULLNULL [エラー]Error スカラー値ではありません。Not a scalar value.

使用してJSON_QUERY代わりにします。Use JSON_QUERY instead.
$info.tags。$.info.tags NULLNULL [エラー]Error スカラー値ではありません。Not a scalar value.

使用してJSON_QUERY代わりにします。Use JSON_QUERY instead.
$info.type[0]。$.info.type[0] NULLNULL [エラー]Error 配列ではありません。Not an array.
$info.none。$.info.none NULLNULL [エラー]Error プロパティが存在しません。Property does not exist.

使用例Examples

例 1Example 1

次の例は、JSON のプロパティの値を使用してtownstateクエリの結果にします。The following example uses the values of the JSON properties town and state in query results. JSON_VALUEが保存されますが、ソースでは、結果の並べ替え順序の照合順序の照合順序によって異なります、jsonInfo列です。Since JSON_VALUE preserves the collation of the source, the sort order of the results depends on the collation of the jsonInfo column.

SELECT FirstName,LastName,
 JSON_VALUE(jsonInfo,'$.info.address[0].town') AS Town
FROM Person.Person
WHERE JSON_VALUE(jsonInfo,'$.info.address[0].state') LIKE 'US%'
ORDER BY JSON_VALUE(jsonInfo,'$.info.address[0].town')

例 2Example 2

次の例は、JSON のプロパティの値を抽出townローカル変数に代入します。The following example extracts the value of the JSON property town into a local variable.

DECLARE @jsonInfo NVARCHAR(MAX)
DECLARE @town NVARCHAR(32)

SET @jsonInfo=N'<array of address info>'

SET @town=JSON_VALUE(@jsonInfo,'$.info.address.town')

例 3Example 3

次の例では、JSON のプロパティの値に基づいて、計算列を作成します。The following example creates computed columns based on the values of JSON properties.

CREATE TABLE dbo.Store
 (
  StoreID INT IDENTITY(1,1) NOT NULL,
  Address VARCHAR(500),
  jsonContent NVARCHAR(8000),
  Longitude AS JSON_VALUE(jsonContent, '$.address[0].longitude'),
  Latitude AS JSON_VALUE(jsonContent, '$.address[0].latitude')
 )

参照See Also

JSON パス式 & #40 です。SQL Server ) JSON Path Expressions (SQL Server)
JSON データ & #40 です。SQL Server )JSON Data (SQL Server)