Как сделать предложение «Где» на простом массиве Json в SQL Server 2017? - PullRequest
0 голосов
/ 03 января 2019

Скажем, у меня в базе данных есть столбец с именем attributes, который имеет это значение в качестве примера:

  {"pages":["Page1"]}

Как я могу сделать предложение where, чтобы я мог отфильтровать строки с "Page1"в нем.

  select JSON_QUERY(Attributes, '$.pages') 
  from Table
  where JSON_QUERY(Attributes, '$.pages') in ('Page1')

Редактировать:

Из документов кажется, что это может сработать, хотя это кажется настолько сложным, что этоделать.

  select count(*)
  from T c
  cross apply Openjson(c.Attributes)
              with (pages nvarchar(max) '$.pages' as json) 
  outer apply openjson(pages) 
              with ([page] nvarchar(100) '$')
  where [page] = 'Page1'

1 Ответ

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

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

use tempdb
create table T(id int, Attributes nvarchar(max))

insert into T(id,Attributes) values (1, '{"pages":["Page1"]}')
insert into T(id,Attributes) values (2, '{"pages":["Page3","Page4"]}')
insert into T(id,Attributes) values (3, '{"pages":["Page3","Page1"]}')

select *
from T
where exists
( 
  select * 
  from openjson(T.Attributes,'$.pages') 
  where value = 'Page1'
)

возвращает

id          Attributes
----------- ---------------------------
1           {"pages":["Page1"]}
3           {"pages":["Page3","Page1"]}

(2 rows affected)
...