【问题标题】:Json_query check which rows have a special value in their json listJson_query 检查哪些行在其 json 列表中具有特殊值
【发布时间】:2019-01-26 19:14:59
【问题描述】:

我有一个表,每行包含一个 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}
]
}

所以我想编写一个代码,如果我搜索 Green,它只返回第 2 行,如果我搜索 Dragon,它返回第 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%'

【问题讨论】:

    标签: tsql json-query


    【解决方案1】:

    类似这样的:

    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%'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 2011-06-09
      • 2022-12-09
      • 1970-01-01
      相关资源
      最近更新 更多