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:
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 :-)
682 Ansichten
0
Antworten
vor 3 Jahren
vor 3 Jahren