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 |
+----------------------------------------------+
sql-json-functions.htm
广告