Json-listnvergleich – SQL server 2016

Ich verwende SQL server 2016 und beschäftige mich derzeit mit dem memoryn, Abrufen und Analysieren von JSON-data. Meine Frage ist auf der list Vergleich.

Beispieldaten: Tabelle hat 2 Spalten

Column1 - Data = 'Microsoft' Column2 - Data = '{"info":{"type":1,"address": {"town":"Bristol","county":"Avon","country":"England"},"tags":["Sport", "Water polo"]},"type":"Basic"}' 

Abfrage:

 SELECT JSON_QUERY(Column2, '$.info.tags') from dbo.sample_table; 

Ausgabe :

 ["Sport", "Water polo"] 

Wie passe ich an, wenn ich nach ["Wasserball", "Sport" fragen muss ? Kann die JSON-Bibliothek in SQL server 2016 die Überprüfung des Array-Inhalts unabhängig von der Reihenfolge der data ermöglichen?

TIA

Also grundsätzlich musst du das Array von tags in deiner JSON-Struktur vergleichen. Wenn die Reihenfolge der Tags irrelevant ist, können Sie Ihr tags Array in eine Tabellen-Ergebnismenge konvertieren und standardmäßig verwenden, where value in (select... SQL-Klausel.

Die erste Sache ist, Tags in SQL-Ergebnismenge umzuwandeln:

 SELECT TagsData.[value] FROM sample_table T CROSS APPLY OPENJSON (T.Column2, '$.info.tags') AS TagsData 

Sie müssen es gegen alles vergleichen, was Sie haben. ZB für Testzwecke verwende ich lokal deklarierte JSON String:

 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') 

(beachten Sie die geänderte Reihenfolge von ["Water polo", "Sport"] )

..und testing, ob es nicht in der Column2 enthalten 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 ) 

Wenn die Ergebnismenge leer ist – Ihre Arrays sind die gleichen und sie passen (unabhängig von ihrer Bestellung). Wenn die Ergebnismenge irgendwelche data enthält, stellt sie eine tatsächliche Differenz dieser beiden JSON-Arrays dar.