我想从下面提到的 json 字符串中获取“OrderNumber”字段值。请建议最好的方法来获得相同的
DECLARE @JSON NVARCHAR(MAX)=
'{"ErpOrderResponses":[{"OrderSubmitStatus":"Ok","TransactionId":"{5EAB3ADC-EB9B-47F7-98B8-1449E2CC0A6B}","OrderNumber":7000027934,"CustomerNumber":80038707,"Description":"Request Successful","ResponseCode":"Success","ResponseType":"None","Errors":[]}],"IsErpUnavailable":false,"IsSuccessful":true,"IsPartiallySuccessful":false,"IsValidationFailed":false,"IsFailed":false}'
DECLARE @OrderNumber BIGINT =
(SELECT REPLACE(REPLACE(SUBSTRING(@JSON,CHARINDEX('OrderNumber',@JSON)+1,
CHARINDEX(',',@JSON,
CHARINDEX('OrderNumber',@JSON)+1
)-CHARINDEX('OrderNumber',@JSON)
)
,'RDERNUMBER":',''),',','') )
--SELECT CAST( @OrderNumber AS BIGINT)
SELECT @OrderNumber
Run Code Online (Sandbox Code Playgroud)
假设您使用的是 SQL Server 2016 或更高版本,您可以使用 JSON_VALUE 函数来解析单个值:
SELECT JSON_VALUE(@JSON,'$.ErpOrderResponses[0].OrderNumber');
Run Code Online (Sandbox Code Playgroud)
如果您要处理多行,我建议您使用 OPENJSON 以获得更好的性能:
SELECT
*
FROM
OPENJSON(@JSON,'$.ErpOrderResponses')
WITH (OrderSubmitStatus varchar(20),OrderNumber bigint);
Run Code Online (Sandbox Code Playgroud)
文档:https : //docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-2017
归档时间: |
|
查看次数: |
149 次 |
最近记录: |