sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man delar en sträng i SQL Server

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 .


  1. Hur kan du gruppera efter i intervall i SQL?

  2. Utmaningslösningar för nummerseriegenerator – del 2

  3. Hur man undertrycker INFO-meddelanden när man kör psql-skript

  4. Hur man utför installation av en EBS 12.2 Vision-instans