Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server 2017中对简单Json数组执行Where子句?_Json_Sql Server_Sql Server 2017 - Fatal编程技术网

如何在SQL Server 2017中对简单Json数组执行Where子句?

如何在SQL Server 2017中对简单Json数组执行Where子句?,json,sql-server,sql-server-2017,Json,Sql Server,Sql Server 2017,假设我在数据库中有一个名为attributes的列,该列具有以下值作为示例: {"pages":["Page1"]} 如何创建where子句,以便筛选出其中包含“Page1”的行 编辑: 从表面上看,这似乎是可行的,尽管它所做的事情看起来很复杂 select count(*) from T c cross apply Openjson(c.Attributes) with (pages nvarchar(max) '$.pages' as json)

假设我在数据库中有一个名为
attributes
的列,该列具有以下值作为示例:

  {"pages":["Page1"]}
如何创建where子句,以便筛选出其中包含“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'
大概是这样的:

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)
大概是这样的:

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)

好的,我试试看。我也从MS文档中找到了上面的例子,不过我觉得你的例子似乎更简单。好的,我会试试。我也从MS文档中找到了上面的例子,不过我觉得你的似乎更简单。你有没有尝试过使用like而不是in?我想它给出了一个例子,我们有第1页的引用(甚至不使用Json_查询),还有Json_查询,您是否试图在选择列表中提取值或Json格式?您是否尝试过使用like而不是in?我想它给出了一个例子,我们有第1页的引用(甚至没有使用Json_查询),还有Json_查询,你是想在那里提取值还是选择列表中的Json格式?