代码之家  ›  专栏  ›  技术社区  ›  Ashkan S Govindaraju

json_查询检查哪些行在其json列表中具有特殊值

  •  0
  • Ashkan S Govindaraju  · 技术社区  · 6 年前

    我有一个表,每行包含一个JSON列。在JSON列中,我有一个包含标记数组的对象。我要做的是查看表中哪些行具有我要搜索的标记。

    以下是我的数据示例:

    Row 1: 
    
    Id :xxx
    
    Jsom Column:
    {
     "tags":[
    {"name":"blue dragon", weight:0.80},
    {"name":"Game", weight:0.90}
    ]
    }
    
    
    Row 2:
    Id : yyy
    
    Jsom Column:
    {
     "tags":[
    {"name":"Green dragon", weight:0.70},
    {"name":"fantasy", weight:0.80}
    ]
    }
    

    所以我想写一个代码,如果我搜索绿色,它只返回第2行,如果我搜索龙,它同时返回第1行和第2行。我该怎么做?

    我知道我可以写这个来访问我的数组,但除此之外,我一无所知:\ 我在找像这样的东西

     Select * from myTable 
     where  JSON_query([JsonColumn], '$.tags[*].name') like '%dragon%'
    

    更新

    我的最后一个问题是这样的

    select DISTINCT t.id, dv.[key], dv.value
    from @t t
    cross apply openjson(doc,'$.tags') as d
    where json_Value( d.value,'$.name') like '%dragon%'
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   David Browne - Microsoft    6 年前

    像这样:

    declare @t table(id int, doc nvarchar(max))
    
    insert into @t(id,doc) values
    (1,'
    {
     "tags":[
    {"name":"blue dragon", "weight":"0.80"},
    {"name":"Game", "weight":"0.90"}
    ]
    }'),(2,'
    {
     "tags":[
    {"name":"Green dragon", "weight":"0.70"},
    {"name":"fantasy", "weight":"0.80"}
    ]
    }')
    
    select  t.id, dv.[key], dv.value
    from @t t
    cross apply openjson(doc,'$.tags') as d
    cross apply openjson(d.value) dv
    where dv.value like '%dragon%'