1. 程式人生 > >SQL 擷取json欄位中的值

SQL 擷取json欄位中的值

欄位值格式:

{"LocalStrings":[{"LanguageCode":"zh-Hans","Value":"客戶要求取消訂單"},{"LanguageCode":"en","Value":"Buyer request to cancel the deal"}],"DefaultLanguage":"en"}

  SQL:
 SELECT Code ,OperationType, SUBSTRING(GlobalName, CHARINDEX('"Value":"', GlobalName) + LEN('"Value":"'),
                  CHARINDEX('"},{"', GlobalName) - CHARINDEX('"Value":"', GlobalName)
                  - LEN('"Value":"'))
 FROM OMSPrd.Sales.OrderOperationalType WHERE OperationType=1

解析:

select substring('abdcsef',1,3)  --括號中數字‘1’表示擷取的起始位置是從該字串第一個字元開始,‘3’表示擷取後得到的字串長度為3個字元。

  通過CHARINDEX如果能夠找到對應的字串,則返回該字串位置,否則返回0。

      基本語法如下:

  CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

      expressionToFind :目標字串,就是想要找到的字串,最大長度為8000 。

  expressionToSearch :用於被查詢的字串。

      start_location:開始查詢的位置,為空時預設從第一位開始查詢。

驗證: 
 DECLARE @str NVARCHAR(max)='{"LocalStrings":[{"LanguageCode":"zh-Hans","Value":"客戶要求取消訂單"},{"LanguageCode":"en","Value":"Buyer request to cancel the deal"}],"DefaultLanguage":"en"}'
SELECT  SUBSTRING(@str, CHARINDEX('"Value":"', @str) + LEN('"Value":"'),
                  CHARINDEX('"},{"', @str) - CHARINDEX('"Value":"', @str)
                  - LEN('"Value":"'))