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
.