Problem:
Du vill dela en sträng i SQL Server.
Exempel 1:
Du har en mening och du vill dela den med mellanslagstecknet.
Lösning 1:
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Resultatet ser ut så här:
värde |
---|
En |
exempel |
mening. |
Diskussion:
Funktionen STRING_SPLIT(sträng, avgränsare) i SQL Server delar strängen i det första argumentet med avgränsaren i det andra argumentet. För att dela upp en mening i ord, ange meningen som det första argumentet i STRING_SPLIT()
funktion och ' ' som det andra argumentet.
STRING_SPLIT()
resulterar i en kolumn med namnet värde. För att få varje del av strängen i en separat rad, välj värde från STRING_SPLIT(string, separator)
. Till exempel,
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Naturligtvis kan du dela en sträng med någon annan avgränsare, t.ex. kommatecken. Du kan också byta namn på kolumnen precis som vilken annan kolumn som helst.
Exempel 2:
I texts
tabell, det finns några meningar.
mening |
---|
Detta är den första meningen. |
Och här är den andra. |
Du vill dela meningarna med blanksteg.
Lösning 2:
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Resultatet ser ut så här:
värde |
---|
Detta |
är |
den |
först |
mening. |
Och |
här är |
den |
annat |
ett. |
Diskussion:
Precis som i föregående exempel delar funktionen STRING_SPLIT(text, separator) strängen som ges som det första argumentet av avgränsaren. Den här gången har du några meningar att ta hand om; dessa meningar lagras i texts
tabell. Det är därför du behöver använda CROSS APPLY; mer specifikt,
texts CROSS APPLY STRING_SPLIT(sentence, ' ')
Använd den i FROM
klausul. Det betyder att den högra sidan (STRING_SPLIT(sentence, ' ')
) tillämpas på varje rad i tabellen till vänster (texts
). Det är därför den högra sidan kan använda kolumnerna från den vänstra tabellen (här, meningskolumnen från texts
tabell.) Här är frågan du får.
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Exempel 3:
I texts
tabell, det finns två kolumner:id
och sentence
.
id | mening |
---|---|
1 | Detta är den första meningen. |
2 | Och här är den andra. |
Du vill dela meningarna med mellanslag och även visa meningarnas ID.
Lösning 3:
SELECT id, value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Resultatet ser ut så här:
id | värde |
---|---|
1 | Detta |
1 | är |
1 | den |
1 | först |
1 | mening. |
2 | Och |
2 | här är |
2 | den |
2 | annat |
2 | en. |
Diskussion:
Det här exemplet är väldigt likt, men du vill också se id
kolumn. För att se den här kolumnen lägger du bara till den i SELECT
lista och kom ihåg att inkludera kommatecken. Du kommer att se meningens ID tillsammans med delarna av meningarna i resultatet. Till exempel är den första meningen uppdelad i 5 delar och har ID:t 1
. Därför kommer ID:t för alla 5 delarna i resultattabellen att vara 1
. Nästa mening, med ID:t 2
, är också uppdelad i 5 delar, och var och en av dessa delar kommer att visas med id = 2
.