sql >> Database >  >> RDS >> Sqlserver

Hoe een string in SQL Server te splitsen

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 .


  1. Hoe de minimale waarde van een kolom in SQL te vinden

  2. ORA-30926:kan geen stabiele set rijen krijgen in de brontabellen bij het samenvoegen van tabellen

  3. Hoe de ASCII-code voor een bepaald personage te vinden in MySQL

  4. Prestatieverrassingen en veronderstellingen:willekeurige TOP 1