sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan opdeles en streng i SQL Server

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 .


  1. Mens du udfører PITR, ville det være muligt at pause/genoptage i PostgreSQL?

  2. MySQL Ligesom flere værdier

  3. Markørbaseret postdatatype med markør, der returnerer flere værdier i Oracle-databasen

  4. Sådan bruger du GO Statement i SQL Server til at indsætte poster i Identity Column - SQL Server / T-SQL Tutorial Del 42