Json_query проверяет, какие строки имеют специальное значение в списке json - PullRequest
0 голосов
/ 26 января 2019

У меня есть таблица, в которой каждая строка содержит столбец 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 Ответ

0 голосов
/ 26 января 2019

Примерно так:

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