Angenommen, die fragliche Tabelle sieht so aus:
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:
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:
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:
Fehlen noch die Kommata:
SELECT name, (SELECT ', ' + CAST(value AS NVARCHAR) FROM openjson(j.hobbies) FOR XML PATH('')) FROM jsontest j;
Ergebnis:
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:
Und das wär's :-)
Hallo Zusammen,
wir benutzen version 5.14 ich such mich schon monatelang dumm und dämlich fur ein Multiselect das man im Dialog benutzen kann...
wo gibts diese Multiselect Erweiterung denn? neuere Versionen? Auch wäre es super wenn es eine Dual Listbox wie bei den Benutzerrollen gäbe das man selbst konfigurieren und mit eigenen SQL Abfragen füllen kann.
gibt es sowas? evtl. mit div. Frameworks ?
Gruß Christian