有没有办法计算 SQL 中JSON中的节点数。
JSON
{ "File":[ { "ID":1, "Fragment":"Frag1" }, { "ID":2, "Fragment":"Frag2" }, { "ID":3, "Fragment":"Frag3" }] }
有没有办法计算File节点下的子元素数?
File
根据上面的例子,答案应该是 3。
假设 SQL Server 2016 或更高版本,您可以使用OPENJSON和select count(*):
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
3
在DB<>Fiddle上观看现场演示
SELECT count(MyObjectList.ID) FROM Mytable CROSS APPLY OPENJSON (JsonDataCol, N'$.File') WITH ( ID int) AS MyObjectList
这是 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 个节点。如果您将 assign_1_variable 如下所示,您也可以在没有表的情况下运行此查询
DECLARE @tosearch Varchar(Max) = '{ "File":[ { "ID":1, "Fragment":"Frag1" }, { "ID":2, "Fragment":"Frag2" }, { "ID":3, "Fragment":"Frag3" } }'
输出如下所示
JsonLength 3
你可以在链接上找到现场演示SQL 演示 - Json 长度
3 回答
假设 SQL Server 2016 或更高版本,
您可以使用OPENJSON和
select count(*)
:结果:
3
在DB<>Fiddle上观看现场演示
这是 Json 字符串插入表中的另一种方法。您可以在较低的 Sql Server 版本(如 SQL Server 2008)中运行此操作,其中 OPENJSON 函数不可用。
这里除以 2,因为 ID 的长度是 2,并且它的一次出现是 1 个节点。如果您将 assign_1_variable 如下所示,您也可以在没有表的情况下运行此查询
输出如下所示
你可以在链接上找到现场演示SQL 演示 - Json 长度