如何在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格式?