需要Sqlserver查询。
示例1:
{“Id”:1785,“Type”:10,“Vendor”:“vendor1”,“Brand”:“brand1”, “LOB”:0,“类别”:“支持”,“名称”:“安全公告”, “MarketVersion”:“WW17-150”,“InternalVersion”:“1.0”,“Edition”:“”, “角色”:“”,“CDIVersion”:“”,“BuildVersion”:“”,“补丁”:“”, “Hotfix”:“”,“Arch”:“x86”,“ReleaseDate”:“2017-09-29”,“已发布”: 1,“Locale”:“en-us”,“Tag”:“”,“ConfigDetails”:“”,“Description”: “Windows安全更新(KB4038779,KB4038786,KB4038793)”, “备注”:“Wonderware安全公告WW17-085”,“UpdateDate”: “2017-09-29”,“ExceptionStatement”:“dddddd”}
示例2:
{“Id”:783,“Type”:10,“Vendor”:“vendor1”,“Brand”:“brand1”, “LOB”:0,“类别”:“支持”,“名称”:“安全公告”, “MarketVersion”:“WW17-085”,“InternalVersion”:“1.0”,“Edition”:“”, “角色”:“”,“CDIVersion”:“”,“BuildVersion”:“”,“补丁”:“”, “Hotfix”:“”,“Arch”:“x86”,“ReleaseDate”:“2017-09-29”,“已发布”: 1,“Locale”:“en-US”,“Tag”:“”,“ConfigDetails”:“”,“Description”: “Windows安全更新(KB4038779,KB4038786,KB4038793)”, “Notes”:“注意:上表中列出的所有Microsoft KB#都是 主流支持下列出的Wonderware产品支持。 *注意:KB4038779是Windows 7 SP1和Windows Server 2008 R2 SP1的仅安全更新。 *注意:KB4038786是Windows Server 2012的仅安全更新。 *注意:KB4038793是Windows 8.1和Windows Server 2012 R2的仅安全更新。“,”UpdateDate“:”2017-09-29“,”ExceptionStatement“: “DDDDDD”}
示例3:
{“Id”:1859,“Type”:1,“Vendor”:“Microsoft”,“Brand”:“”,“LOB”:0, “类别”:“”,“名称”:“Windows”,“MarketVersion”:“30”, “InternalVersion”:“”,“版本”:“嵌入式标准”,“角色”:“”, “CDIVersion”:“”,“BuildVersion”:“”,“Patch”:“SP1”,“Hotfix”:“”, “Arch”:“x86”,“ReleaseDate”:“2017-11-21”,“已发布”:1,“Locale”: “en-us”,“Tag”:“”,“ConfigDetails”:“”,“Description”:“desc”, “Notes”:“notes”,“MsSecurityLink”:“”,“InformationLink”:“”, “UpdateDate”:“1900-01-01”,“ExceptionStatement”:“”}
在上面的json字符串中有'Type'属性。我需要Type的值。例如1输出应该是10,在第二个例子中输出应该是10,在第三个例子中输出应该是1.
请帮助sqlserver查询。
答案 0 :(得分:1)
尝试以下
DECLARE @json varchar(1000)='{ "Id": 1785, "Type": 10, "Vendor": "vendor1", ...}'
DECLARE @pos1 int=NULLIF(CHARINDEX('"Type": ',@json),0)+LEN('"Type": ')
DECLARE @pos2 int=CHARINDEX(',',@json,@pos1)
SELECT @pos1,@pos2,CAST(SUBSTRING(@json,@pos1,@pos2-@pos1) AS int)
在查询中
SELECT pos1,pos2,CAST(SUBSTRING(json,pos1,pos2-pos1) AS int) [Type],json
FROM
(
SELECT
NULLIF(CHARINDEX('"Type": ',json),0)+LEN('"Type": ') pos1,
CHARINDEX(',',json,NULLIF(CHARINDEX('"Type": ',json),0)+LEN('"Type": ')) pos2,
json
FROM
(
SELECT '{ "Id": 1785, "Type": 10, "Vendor": "vendor1", ... }' json
UNION ALL SELECT '{ "Id": 783, "Type": 10, "Vendor": "vendor1", ...}'
UNION ALL SELECT '{ "Id": 1859, "Type": 1, "Vendor": "Microsoft", ...}'
UNION ALL SELECT '{"IdLeft": 255, "TypeLeft": 0, "IdRight": 284, "TypeRight": 0, "RelationshipType": 1, "Description": "" }'
) q
) q