SQL JSON_VALUE() 函数
SQL JSON_VALUE() 函数接受一个 JSON 字符串并返回一个标量值。它解码 JSON 字符串并沿着预定的路径提取标量值。路径以一定的格式提供,如下所示。
- ‘$’ - 它引用整个 JSON 对象。
-
‘$.property1’ - 它引用 JSON 对象中的 property1。
-
‘$[2]’ - 它引用 JSON 对象中的第二个元素。
-
‘$.property1.property2[4].property3’ - 它引用 JSON 对象中的嵌套属性。
语法
以下是 SQL JSON_VALUE() 函数的语法
JSON_VALUE ( expression , path )
参数
- expression − 通常是列的名称或包含JSON文本的变量。
-
path − 指定要提取的属性的JSON路径。如果路径的格式无效,JSON_VALUE将返回错误。
示例
通过以下查询从JSON字符串中检索键值:
SELECT JSON_VALUE('{"Name": "TUTORIALSPOINT"}', '$.Name') AS 'Result';
输出
执行以上查询时,输出如下所示−
+------------------------------------+
| Result|
+------------------------------------+
| TUzTORIALSPOINT |
+------------------------------------+
示例
在下面的示例中,我们将明确指定lax到不包含与JSON字符串匹配的参数的路径,并通过使用以下查询来检查结果-
SELECT JSON_VALUE('{"Name": "TUTORIALSPOINT"}', 'lax$.firstName') AS 'Result';
输出
当我们执行上述查询时,输出结果如下:
+------------------------------------+
| Result|
+------------------------------------+
| NULL |
+------------------------------------+
示例
让我们考虑下面的示例,我们将使用以下查询语句从JSON字符串中获取JSON数组的第二个值-
DECLARE @iphone VARCHAR(MAX)
= '{
"Item":"Iphone13",
"Color":["Green", "Pink", "White"]
}'
SELECT JSON_VALUE(@iphone,'$.Color[1]') AS JSON_Color
输出
当我们执行上述查询时,输出结果如下所示:
+------------------------------------+
| JSON_Color |
+------------------------------------+
| Pink |
+------------------------------------+
示例
让我们考虑另一种情况,我们要通过使用以下查询从JSON数组中检索第一条记录以指定索引位置-
DECLARE @work VARCHAR(4000);
SET @work = N'{
"Customers": [
{
"Name": "XYZ",
"Age": "23",
"Address": "101, Sector 5, Gurugram, India",
"Salary": 105000
},
{
"Name": "ABC",
"Age": "34",
"Address": "17, Park Avenue, Mumbai, India",
"Salary": 780000
}
]
}';
SELECT JSON_VALUE(@work, '.Customers[0].Name') AS 'Name', JSON_VALUE(@work, '.Customers[0].Age') AS 'Age',
JSON_VALUE(@work, '.Customers[0].Address') AS 'Address', JSON_VALUE(@work, '.Customers[0].Salary') AS 'Salary';
输出
执行上述查询后,输出结果如下所示 −
+-------+-----+-------------------------------+-----------+
| Name |Age | Address | Salary |
+-------+-----+-------------------------------+-----------+
| XYZ |23 |101, Sector 5, Gurugram, India | 105000 |
+-------+-----+-------------------------------+-----------+
示例
让我们考虑另一个示例,我们将使用以下查询来检索嵌套的JSON中的值-
DECLARE @work VARCHAR(4000);
SET @work = N'{
"Customers": [
{
"Name": "Revi",
"Age": "25",
"Department": {"course":"HTML", "Field":"IT"
"Salary": 100000
},
]
}';
SELECT JSON_VALUE(@work, '.Customers[0].Name') AS 'Name', JSON_VALUE(@work, '.Customers[0].Department.Field') AS 'Field';
输出
执行上述查询后,输出结果显示如下:
+-------+-----+
| Name |Field|
+-------+-----+
| Revi |IT |
+-------+-----+
示例
让我们来看一个示例,我们将使用严格路径并尝试使用以下查询来检索输出结果。
SELECT JSON_VALUE('{"car": "RX100"}', 'strict$.car') AS 'Output';
输出
执行上述查询后,输出结果如下所示:
+----------------------------------------------+
| Result |
+----------------------------------------------+
| RX100 |
+----------------------------------------------+