我正在使用Server 2016,目前正在存储、检索和解析JSON数据。我的问题在清单上比较。
示例数据:表有2列
Column1 - Data = 'Microsoft'
Column2 - Data = '{"info":{"type":1,"address": {"town":"Bristol","county":"Avon","country":"England"},"tags":["Sport", "Water polo"]},"type":"Basic"}'查询:
SELECT JSON_QUERY(Column2, '$.info.tags') from dbo.sample_table;输出:
["Sport", "Water polo"]我如何匹配,如果我需要检查“水球”,“运动”?Server 2016中的JSON库是否允许检查数组内容,而不管数据的顺序如何?
提亚
发布于 2017-08-22 15:55:45
因此,基本上,您需要比较JSON结构中的tags数组。如果标记的顺序无关,则可以将tags数组转换为表结果集,并使用标准的where value in (select... SQL子句。
第一件事是将标记转换为SQL结果集:
SELECT TagsData.[value]
FROM sample_table T CROSS APPLY OPENJSON (T.Column2, '$.info.tags') AS TagsData..then,你需要把它和你所拥有的任何东西进行比较。例如,为了测试目的,我使用了本地声明的JSON字符串:
DECLARE @json NVARCHAR(4000) = N'
{
"info":{"type":1,"address": {"town":"Bristol","county":"Avon","country":"England"},
"tags":["Water polo", "Sport"]},"type":"Basic"
}';
SELECT [value]
FROM OPENJSON(@json,'$.info.tags')(注意["Water polo", "Sport"]更改的顺序)
..and测试(如果它不包含在Column2中)
DECLARE @json NVARCHAR(4000) = N'
{
"info":{"type":1,"address": {"town":"Bristol","county":"Avon","country":"England"},
"tags":["Water polo", "Sport"]},"type":"Basic"
}';
SELECT [value]
FROM OPENJSON(@json,'$.info.tags')
where [value] not in
(
SELECT TagsData.[value]
FROM TestTable T CROSS APPLY OPENJSON (T.Column2, '$.info.tags') AS TagsData
)如果结果集是空的-您的数组是相同的,它们确实匹配(不管它们的顺序)。如果结果集包含任何数据,则表示这两个JSON数组的实际差异。
https://stackoverflow.com/questions/45821459
复制相似问题