Probleem:
U wilt een string splitsen in SQL Server.
Voorbeeld 1:
Je hebt een zin en je wilt deze splitsen door de spatie.
Oplossing 1:
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Het resultaat ziet er als volgt uit:
waarde |
---|
Een |
voorbeeld |
zin. |
Discussie:
De functie STRING_SPLIT(tekenreeks, scheidingsteken) in SQL Server splitst de tekenreeks in het eerste argument door het scheidingsteken in het tweede argument. Om een zin in woorden te splitsen, specificeert u de zin als het eerste argument van de STRING_SPLIT()
functie en '' als het tweede argument.
STRING_SPLIT()
resulteert in een kolom met de naam waarde. Om elk deel van de tekenreeks in een aparte rij te krijgen, selecteert u de waarde uit STRING_SPLIT(string, separator)
. Bijvoorbeeld,
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Natuurlijk kunt u een tekenreeks splitsen met een ander scheidingsteken, bijvoorbeeld de komma. Je kunt de kolom ook hernoemen, net als elke andere kolom.
Voorbeeld 2:
In de texts
tabel, er zijn enkele zinnen.
zin |
---|
Dit is de eerste zin. |
En hier is de andere. |
U wilt de zinnen splitsen op het spatieteken.
Oplossing 2:
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Het resultaat ziet er als volgt uit:
waarde |
---|
Dit |
is |
de |
eerste |
zin. |
En |
hier is |
de |
andere |
een. |
Discussie:
Net als in het vorige voorbeeld splitst de functie STRING_SPLIT(tekst, scheidingsteken) de tekenreeks die als eerste argument door het scheidingsteken is opgegeven. Deze keer heb je een paar zinnen om voor te zorgen; deze zinnen worden opgeslagen in de texts
tafel. Dit is waarom je CROSS APPLY moet gebruiken; meer specifiek,
texts CROSS APPLY STRING_SPLIT(sentence, ' ')
Gebruik het in de FROM
clausule. Het betekent dat de rechterkant (STRING_SPLIT(sentence, ' ')
) wordt toegepast op elke rij van de linkertabel (texts
). Dit is de reden waarom de rechterkant de kolommen uit de linkertabel kan gebruiken (hier de zinskolom uit de texts
tabel.) Dit is de vraag die u krijgt.
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Voorbeeld 3:
In de texts
tabel, zijn er twee kolommen:id
en sentence
.
id | zin |
---|---|
1 | Dit is de eerste zin. |
2 | En hier is de andere. |
U wilt de zinnen splitsen op het spatieteken en ook de ID's van de zinnen weergeven.
Oplossing 3:
SELECT id, value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Het resultaat ziet er als volgt uit:
id | waarde |
---|---|
1 | Dit |
1 | is |
1 | de |
1 | eerste |
1 | zin. |
2 | En |
2 | hier is |
2 | de |
2 | andere |
2 | één. |
Discussie:
Dit voorbeeld lijkt erg op elkaar, maar u wilt ook de id
. zien kolom. Om deze kolom te zien, voegt u deze toe aan de SELECT
lijst en vergeet niet de komma op te nemen. U ziet de ID van de zin samen met de delen van de zinnen in het resultaat. De eerste zin is bijvoorbeeld opgesplitst in 5 delen en heeft de ID 1
. Daarom is de ID voor alle 5 delen in de resultatentabel 1
. De volgende zin, met de ID 2
, is ook opgesplitst in 5 delen, en elk van deze delen wordt getoond met id = 2
.