Examples: query, "exact match", wildcard*, wild?ard, wild*rd
Fuzzy search: cake~ (finds cakes, bake)
Term boost: "red velvet"^4, chocolate^2
Field grouping: tags:(+work -"fun-stuff")
Escaping: Escape characters +-&|!(){}[]^"~*?:\ with \, e.g. \+
Range search: properties.timestamp:[1587729413488 TO *] (inclusive), properties.title:{A TO Z}(excluding A and Z)
Combinations: chocolate AND vanilla, chocolate OR vanilla, (chocolate OR vanilla) NOT "vanilla pudding"
Field search: properties.title:"The Title" AND text
Unbeantwortet
Ich benutze die Multi-Select-Erweiterung im JobRouter und möchte den Inhalt des gespeicherten JSON-Strings als kommaseparierte Liste in einer Übersicht darstellen.


Angenommen, die fragliche Tabelle sieht so aus:

file

Die Funktion OPENJSON hilft uns, die JSON-Spalte zu parsen, mit FOR XML PATH gibt man das Ergebnis als XML Struktur zurück:

SELECT name, (SELECT * FROM OPENJSON(j.hobbies) FOR XML PATH('')) FROM jsontest j;

Ergebnis:

file

Also eine Tabelle, mit den Spalten key, value und type, die in eine XML Struktur umgewandelt wird (die types sind 0: string, 1: number, 2: boolean, 3:null, 4:object, 5:array).
Uns interessiert die Spalte value:

SELECT name, (SELECT value FROM openjson(j.hobbies) FOR XML PATH('')) FROM jsontest j;

Ergebnis:

file

Die value-tags sollten wir noch per CAST umwandeln:

SELECT name, (SELECT CAST(value AS NVARCHAR) FROM openjson(j.hobbies) FOR XML PATH('')) FROM jsontest j;

Ergebnis:

file

Fehlen noch die Kommata:

SELECT name, (SELECT ', ' + CAST(value AS NVARCHAR) FROM openjson(j.hobbies) FOR XML PATH('')) FROM jsontest j;

Ergebnis:

file

Muss noch das erste Komma und das erste Leerzeichen weg:

SELECT name, SUBSTRING((SELECT ', ' + CAST(value AS NVARCHAR) FROM openjson(j.hobbies) FOR XML PATH('')), 3, 10000) AS Hobbies FROM jsontest j;

Bei der SQL Server SUBSTRING Funktion braucht man zwingend sowohl einen Start- als auch einen Endwert, deswegen die 10000.

Ergebnis:

file

Und das wär's :-)

  
  
Gepostet vor 3 Jahren
Bearbeitet vor 3 Jahren
Jan Zimmerbeutel
272 × 4 Administrator
682 Ansichten
0 Antworten
vor 3 Jahren
vor 3 Jahren