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
Beantwortet
Ich benutze die Multi-Select-Erweiterung im JobRouter und möchte den Inhalt des gespeicherten JSON-Strings als kommaseparierte Liste in einer Übersicht darstellen.

Die Multi-Select Erweiterung kann sehr praktisch sein, jedoch ist die Darstellung des Eintrags in einer Spalte eines JobSelects im Format {"0:"Eintrag1", "1":"Eintrag2"} nicht brauchbar. Wie kann man die ausgewählten Punkte als kommaseparierte Liste darstellen?

1
1
Gepostet vor 3 Jahren
Bearbeitet vor 3 Jahren
Jan Zimmerbeutel
272 × 4 Administrator
Stimmen Neuste

Antworten 2


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

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

  
  
Gepostet vor einem Jahr
7K Ansichten
2 Antworten
vor 3 Jahren
vor einem Jahr
Stichwörter