2

如何让 SQL 查询进入列的 JSON 中,并在整个列中查找子字符串的实例数?

我正在使用 SQL Server 2016。

IE

FruitPageTable
[Id, PageData (nvarchar(max))]
[1 , [{"id":"0","Url":"/i-like-apples/ok-cool"}, {"id":"1","Url":"/where-are-apples/nowhere"} ] 
[2 , [{"id":"0","Url":"/where-are-oranges/everywhere"}]
[3 , [{"id":"0","Url":"/where-are-apples/somewhere"}]
[4 , [{"id":"0","Url":"/apples"},{"id":"1","Url":"/yay-apples"},{"id":"2","Url":"/apples"}]

所以

SELECT COUNT(*) FROM FruitPageTable WHERE [PageData] LIKE '%apples%'

给我 3...即其中包含“苹果”的记录数量。

但是,如何在所有记录Url中获取 JSON 中属性中的“苹果”计数?PageData即总共6次提及。我应该使用 JSON_QUERY 的一些语法吗?

4

1 回答 1

2

我认为你不需要json_query检查 number of 'apples'string并且mathematical函数会这样做。

select
  sum(round((length(val) - length(replace(val, 'apples', '')))/length('apples'))) AS count    
from
  MySQLTable

dbfiddle

sqlserver , 使用openjson

select count(1) from
MySQLTable t1
cross apply openjson(t1.val)
with (
   url varchar(200) '$.Url'
) as i
where url like '%apples%'

sqlfiddle

于 2019-11-28T01:13:38.237 回答