在sqlserver

时间:2017-11-22 10:57:06

标签: json sql-server sql-server-2008-r2

需要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查询。

1 个答案:

答案 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