Problem:
Sie möchten einen String in SQL Server aufteilen.
Beispiel 1:
Sie haben einen Satz und möchten ihn durch das Leerzeichen trennen.
Lösung 1:
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Das Ergebnis sieht so aus:
Wert |
---|
Ein |
Beispiel |
Satz. |
Diskussion:
Die Funktion STRING_SPLIT(string, separator) in SQL Server teilt die Zeichenfolge im ersten Argument durch das Trennzeichen im zweiten Argument. Um einen Satz in Wörter aufzuteilen, geben Sie den Satz als erstes Argument von STRING_SPLIT()
an Funktion und ' ' als zweites Argument.
STRING_SPLIT()
ergibt eine Spalte namens value. Um jeden Teil der Zeichenfolge in einer separaten Zeile zu erhalten, wählen Sie den Wert aus STRING_SPLIT(string, separator)
aus . Zum Beispiel
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Natürlich können Sie einen String auch mit einem anderen Trennzeichen teilen, z. B. dem Komma. Sie können die Spalte auch wie jede andere Spalte umbenennen.
Beispiel 2:
In den texts
Tabelle, da sind einige Sätze.
Satz |
---|
Das ist der erste Satz. |
Und hier ist der andere. |
Sie möchten die Sätze durch das Leerzeichen trennen.
Lösung 2:
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Das Ergebnis sieht so aus:
Wert |
---|
Das |
ist |
der |
zuerst |
Satz. |
Und |
hier |
der |
andere |
eins. |
Diskussion:
Genau wie im vorherigen Beispiel teilt die Funktion STRING_SPLIT(Text, Trennzeichen) die als erstes Argument angegebene Zeichenfolge durch das Trennzeichen. Diesmal müssen Sie sich um ein paar Sätze kümmern; diese Sätze werden in den texts
gespeichert Tisch. Aus diesem Grund müssen Sie CROSS APPLY verwenden; genauer gesagt
texts CROSS APPLY STRING_SPLIT(sentence, ' ')
Verwenden Sie es im FROM
Klausel. Das bedeutet, dass die rechte Seite (STRING_SPLIT(sentence, ' ')
) wird auf jede Zeile der linken Tabelle angewendet (texts
). Deshalb kann die rechte Seite die Spalten aus der linken Tabelle verwenden (hier die Satzspalte aus den texts
table.) Hier ist die Abfrage, die Sie erhalten.
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Beispiel 3:
In den texts
Tabelle gibt es zwei Spalten:id
und sentence
.
id | Satz |
---|---|
1 | Das ist der erste Satz. |
2 | Und hier ist der andere. |
Sie möchten die Sätze durch das Leerzeichen trennen und auch die IDs der Sätze anzeigen.
Lösung 3:
SELECT id, value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Das Ergebnis sieht so aus:
id | Wert |
---|---|
1 | Das |
1 | ist |
1 | der |
1 | zuerst |
1 | Satz. |
2 | Und |
2 | hier |
2 | der |
2 | Sonstiges |
2 | eins. |
Diskussion:
Dieses Beispiel ist sehr ähnlich, aber Sie möchten auch die id
sehen Säule. Um diese Spalte zu sehen, fügen Sie sie einfach zu SELECT
hinzu Liste und denken Sie daran, das Komma einzuschließen. Sie sehen die ID des Satzes zusammen mit den Teilen der Sätze im Ergebnis. Beispielsweise ist der erste Satz in 5 Teile aufgeteilt und hat die ID 1
. Daher ist die ID für alle 5 Teile in der Ergebnistabelle 1
. Der nächste Satz mit der ID 2
, ist ebenfalls in 5 Teile aufgeteilt, und jeder dieser Teile wird mit id = 2
angezeigt .