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
廣告