Ich benutze die Multi-Select-Erweiterung im JobRouter und möchte den Inhalt des gespeicherten JSON-Strings als kommaseparierte Liste in einer Übersicht darstellen.
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](https://yellowdevs.de/upload/files/1613142525284_grafik.png)
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](https://yellowdevs.de/upload/files/1613142952858_grafik.png)
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](https://yellowdevs.de/upload/files/1613143233931_grafik.png)
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](https://yellowdevs.de/upload/files/1613143354507_grafik.png)
Fehlen noch die Kommata:
```
SELECT name, (SELECT ', ' + CAST(value AS NVARCHAR) FROM openjson(j.hobbies) FOR XML PATH('')) FROM jsontest j;
```
Ergebnis:
![file](https://yellowdevs.de/upload/files/1613143496374_grafik.png)
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](https://yellowdevs.de/upload/files/1613143807329_grafik.png)
Und das wär's :-)
Angenommen, die fragliche Tabelle sieht so aus:
![file](https://yellowdevs.de/upload/files/1613142525284_grafik.png)
Die Funktion OPENJSON hilft uns, die JSON-Spalte zu parsen, mit FOR XML PATH gibt das Ergebnis als XML Struktur zurück:
```
SELECT name, (SELECT * FROM OPENJSON(j.hobbies) FOR XML PATH('')) FROM jsontest j;
```
Ergebnis:
![file](https://yellowdevs.de/upload/files/1613142952858_grafik.png)
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](https://yellowdevs.de/upload/files/1613143233931_grafik.png)
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](https://yellowdevs.de/upload/files/1613143354507_grafik.png)
Fehlen noch die Kommata:
```
SELECT name, (SELECT ', ' + CAST(value AS NVARCHAR) FROM openjson(j.hobbies) FOR XML PATH('')) FROM jsontest j;
```
Ergebnis:
![file](https://yellowdevs.de/upload/files/1613143496374_grafik.png)
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](https://yellowdevs.de/upload/files/1613143807329_grafik.png)
Und das wär's :-)
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](https://yellowdevs.de/upload/files/1613142525284_grafik.png)
Die Funktion OPENJSON hilft uns, die JSON-Spalte zu parsen, mit FOR XML PATH gibt das Ergebnis als XML Struktur zurück:
```
SELECT name, (SELECT * FROM OPENJSON(j.hobbies) FOR XML PATH('')) FROM jsontest j;
```
Ergebnis:
![file](https://yellowdevs.de/upload/files/1613142952858_grafik.png)
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](https://yellowdevs.de/upload/files/1613143233931_grafik.png)
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](https://yellowdevs.de/upload/files/1613143354507_grafik.png)
Fehlen noch die Kommata:
```
SELECT name, (SELECT ', ' + CAST(value AS NVARCHAR) FROM openjson(j.hobbies) FOR XML PATH('')) FROM jsontest j;
```
Ergebnis:
![file](https://yellowdevs.de/upload/files/1613143496374_grafik.png)
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](https://yellowdevs.de/upload/files/1613143807329_grafik.png)
Und das wär's :-)