有没有一种方法可以计算SQL JSON
中的节点数。
{
"File":[
{
"ID":1,
"Fragment":"Frag1"
},
{
"ID":2,
"Fragment":"Frag2"
},
{
"ID":3,
"Fragment":"Frag3"
}]
}
是否可以计算File
节点下的子元素数量?
根据上面的示例,答案应为3。
答案 0 :(得分:4)
假设SQL Server 2016版或更高版本,
您可以使用OPENJSON
和select count(*)
:
DECLARE @Content varchar(500) = '{
"File":[
{
"ID":1,
"Fragment":"Frag1"
},
{
"ID":2,
"Fragment":"Frag2"
},
{
"ID":3,
"Fragment":"Frag3"
}]
}';
SELECT COUNT(*)
FROM OPENJSON(@Content, N'$.File')
结果:3
在DB<>Fiddle上观看实时演示
答案 1 :(得分:0)
SELECT count(MyObjectList.ID)
FROM Mytable
CROSS APPLY OPENJSON (JsonDataCol, N'$.File')
WITH (
ID int)
AS MyObjectList
答案 2 :(得分:0)
这是将Json字符串插入表中的另一种方法。您可以在较低的Sql Server版本(例如SQL Server 2008)中运行此版本,也不能使用OPENJSON功能。
create table #temp (JsonDataCol varchar(max))
insert into #temp values (
'{
"File":[
{
"ID":1,
"Fragment":"Frag1"
},
{
"ID":2,
"Fragment":"Frag2"
},
{
"ID":3,
"Fragment":"Frag3"
}
}'
)
DECLARE @string Varchar(20) = '"ID"'
DECLARE @tosearch Varchar(Max)
set @tosearch = (SELECT JsonDataCol FROM #temp)
SELECT (LEN(@tosearch) - LEN(REPLACE(@tosearch, 'ID', '')))/2 as JsonLength
DROP TABLE #temp
这里除以2是因为ID的长度是2,并且一次出现是1个节点。 如果您将如下所示分配@tosearch变量,也可以不使用表运行此查询
DECLARE @tosearch Varchar(Max) = '{
"File":[
{
"ID":1,
"Fragment":"Frag1"
},
{
"ID":2,
"Fragment":"Frag2"
},
{
"ID":3,
"Fragment":"Frag3"
}
}'
输出如下所示
JsonLength
3
您可以在链接SQL Demo - Json Length上找到实时演示