Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So teilen Sie eine Zeichenfolge in SQL Server

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 .