Problem:
Chcesz podzielić ciąg w SQL Server.
Przykład 1:
Masz zdanie i chcesz je podzielić przez spację.
Rozwiązanie 1:
SELECT value
FROM STRING_SPLIT('An example sentence.', ' ');
Wynik wygląda tak:
| wartość |
|---|
| An |
| przykład |
| zdanie. |
Dyskusja:
Funkcja STRING_SPLIT(ciąg, separator) w SQL Server dzieli ciąg w pierwszym argumencie przez separator w drugim argumencie. Aby podzielić zdanie na słowa, określ zdanie jako pierwszy argument funkcji STRING_SPLIT() funkcja i ' ' jako drugi argument.
STRING_SPLIT() wyniki w kolumnie o nazwie value. Aby uzyskać każdą część ciągu w osobnym wierszu, wybierz wartość z STRING_SPLIT(string, separator) . Na przykład
SELECT value
FROM STRING_SPLIT('An example sentence.', ' ');
Oczywiście możesz podzielić ciąg znaków za pomocą innego separatora, np. przecinka. Możesz również zmienić nazwę kolumny, tak jak każdej innej kolumny.
Przykład 2:
W texts tabeli, jest kilka zdań.
| zdanie |
|---|
| To jest pierwsze zdanie. |
| A oto druga. |
Chcesz podzielić zdania znakiem spacji.
Rozwiązanie 2:
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Wynik wygląda tak:
| wartość |
|---|
| To |
| jest |
| pierwszy |
| zdanie. |
| I |
| oto |
| inne |
| jeden. |
Dyskusja:
Podobnie jak w poprzednim przykładzie, funkcja STRING_SPLIT(tekst, separator) dzieli ciąg podany jako pierwszy argument przez separator. Tym razem masz kilka zdań do załatwienia; te zdania są przechowywane w texts stół. Dlatego musisz użyć CROSS APPLY; dokładniej,
texts CROSS APPLY STRING_SPLIT(sentence, ' ')
Użyj go w FROM klauzula. Oznacza to, że prawa strona (STRING_SPLIT(sentence, ' ') ) jest stosowany do każdego wiersza tabeli po lewej stronie (texts ). Dlatego prawa strona może używać kolumn z tabeli po lewej stronie (tutaj kolumna zdań z texts tabeli.) Oto zapytanie, które otrzymasz.
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Przykład 3:
W texts tabela, są dwie kolumny:id i sentence .
| id | zdanie |
|---|---|
| 1 | To jest pierwsze zdanie. |
| 2 | A oto druga. |
Chcesz podzielić zdania znakiem spacji, a także pokazać identyfikatory zdań.
Rozwiązanie 3:
SELECT id, value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Wynik wygląda tak:
| id | wartość |
|---|---|
| 1 | To |
| 1 | jest |
| 1 | |
| 1 | pierwszy |
| 1 | zdanie. |
| 2 | I |
| 2 | oto |
| 2 | |
| 2 | inne |
| 2 | jeden. |
Dyskusja:
Ten przykład jest bardzo podobny, ale chcesz również zobaczyć id kolumna. Aby zobaczyć tę kolumnę, po prostu dodaj ją do SELECT listę i pamiętaj, aby wstawić przecinek. Zobaczysz identyfikator zdania wraz z częściami zdań w wyniku. Na przykład pierwsze zdanie jest podzielone na 5 części i ma identyfikator 1 . Dlatego identyfikatorem wszystkich 5 części w tabeli wyników będzie 1 . Następne zdanie o identyfikatorze 2 , jest również podzielony na 5 części, a każda z tych części będzie pokazana z id = 2 .