Json_query 检查哪些行在其 json 列表中具有特殊值
Json_query check which rows have a special value in their json list
我有一个 table,每行包含一个 json 列。在 json 列中,我有一个包含标签数组的对象。我想做的是查看 table 中的哪些行具有我正在搜索的标签。
这是我的数据示例:
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,它 returns 只有第 2 行,如果我搜索 dragon,它 returns 在第 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%'
像这样:
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%'
我有一个 table,每行包含一个 json 列。在 json 列中,我有一个包含标签数组的对象。我想做的是查看 table 中的哪些行具有我正在搜索的标签。
这是我的数据示例:
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,它 returns 只有第 2 行,如果我搜索 dragon,它 returns 在第 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%'
像这样:
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%'