Problem:
Du vil opdele en streng i SQL Server.
Eksempel 1:
Du har en sætning, og du vil gerne opdele den med mellemrumstegnet.
Løsning 1:
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Resultatet ser således ud:
værdi |
---|
En |
eksempel |
sætning. |
Diskussion:
Funktionen STRING_SPLIT(streng, separator) i SQL Server opdeler strengen i det første argument med separatoren i det andet argument. For at opdele en sætning i ord skal du angive sætningen som det første argument i STRING_SPLIT()
funktion og ' ' som det andet argument.
STRING_SPLIT()
resulterer i en kolonne med navnet værdi. For at få hver del af strengen i en separat række skal du vælge værdi fra STRING_SPLIT(string, separator)
. For eksempel,
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Selvfølgelig kan du opdele en streng ved at bruge en anden separator, f.eks. kommaet. Du kan også omdøbe kolonnen ligesom enhver anden kolonne.
Eksempel 2:
I texts
tabel, er der nogle sætninger.
sætning |
---|
Dette er den første sætning. |
Og her er den anden. |
Du vil opdele sætningerne med mellemrumstegnet.
Løsning 2:
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Resultatet ser således ud:
værdi |
---|
Dette |
er |
den |
først |
sætning. |
Og |
her er |
den |
andet |
én. |
Diskussion:
Ligesom i det foregående eksempel opdeler funktionen STRING_SPLIT(tekst, separator) strengen givet som det første argument af separatoren. Denne gang har du et par sætninger, du skal tage dig af; disse sætninger er gemt i texts
bord. Det er derfor, du skal bruge CROSS APPLY; mere specifikt,
texts CROSS APPLY STRING_SPLIT(sentence, ' ')
Brug det i FROM
klausul. Det betyder, at højre side (STRING_SPLIT(sentence, ' ')
) anvendes på hver række i tabellen i venstre side (texts
). Dette er grunden til, at højre side kan bruge kolonnerne fra tabellen i venstre side (her sætningskolonnen fra texts
tabel.) Her er den forespørgsel, du får.
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Eksempel 3:
I texts
tabel, er der to kolonner:id
og sentence
.
id | sætning |
---|---|
1 | Dette er den første sætning. |
2 | Og her er den anden. |
Du vil opdele sætningerne med mellemrumstegn og også vise sætningernes ID'er.
Løsning 3:
SELECT id, value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Resultatet ser således ud:
id | værdi |
---|---|
1 | Dette |
1 | er |
1 | den |
1 | først |
1 | sætning. |
2 | Og |
2 | her er |
2 | den |
2 | andet |
2 | én. |
Diskussion:
Dette eksempel ligner meget, men du vil også gerne se id
kolonne. For at se denne kolonne skal du blot tilføje den til SELECT
liste og husk at medtage kommaet. Du vil se sætningens ID sammen med delene af sætningerne i resultatet. For eksempel er den første sætning opdelt i 5 dele og har ID'et 1
. Derfor vil ID'et for alle 5 dele i resultattabellen være 1
. Den næste sætning med ID'et 2
, er også opdelt i 5 dele, og hver af disse dele vil blive vist med id = 2
.