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

Come dividere una stringa in SQL Server

Problema:

Vuoi dividere una stringa in SQL Server.

Esempio 1:

Hai una frase e vorresti dividerla per il carattere spazio.

Soluzione 1:

SELECT value
FROM STRING_SPLIT('An example sentence.', ' ');

Il risultato è simile al seguente:

valore
An
esempio
frase.

Discussione:

La funzione STRING_SPLIT(string, separator) in SQL Server divide la stringa nel primo argomento per il separatore nel secondo argomento. Per dividere una frase in parole, specifica la frase come primo argomento di STRING_SPLIT() funzione e ' ' come secondo argomento.

STRING_SPLIT() risulta in una colonna denominata valore. Per ottenere ciascuna parte della stringa in una riga separata, seleziona il valore da STRING_SPLIT(string, separator) . Ad esempio,

SELECT value
FROM STRING_SPLIT('An example sentence.', ' ');

Ovviamente puoi dividere una stringa usando qualche altro separatore, ad esempio la virgola. Puoi anche rinominare la colonna come qualsiasi altra colonna.

Esempio 2:

Nei texts tabella, ci sono alcune frasi.

frase
Questa è la prima frase.
Ed ecco l'altro.

Vuoi dividere le frasi per il carattere spazio.

Soluzione 2:

SELECT value
FROM texts
CROSS APPLY STRING_SPLIT(sentence, ' ');

Il risultato è simile al seguente:

valore
Questo
è
il
prima
frase.
E
ecco
il
altro
uno.

Discussione:

Proprio come nell'esempio precedente, la funzione STRING_SPLIT(text, separator) divide la stringa data come primo argomento dal separatore. Questa volta, hai alcune frasi di cui occuparti; queste frasi sono memorizzate nei texts tavolo. Questo è il motivo per cui è necessario utilizzare CROSS APPLY; più precisamente,

texts CROSS APPLY STRING_SPLIT(sentence, ' ')

Usalo nel FROM clausola. Significa che il lato destro (STRING_SPLIT(sentence, ' ') ) viene applicato a ciascuna riga della tabella di sinistra (texts ). Questo è il motivo per cui il lato destro può utilizzare le colonne della tabella di sinistra (qui, la colonna delle frasi dai texts tabella.) Ecco la query che ottieni.

SELECT value
FROM texts
CROSS APPLY STRING_SPLIT(sentence, ' ');

Esempio 3:

Nei texts tabella, ci sono due colonne:id e sentence .

id frase
1 Questa è la prima frase.
2 Ed ecco l'altro.

Vuoi dividere le frasi per il carattere spazio e mostrare anche gli ID delle frasi.

Soluzione 3:

SELECT
  id,
  value
FROM texts
CROSS APPLY STRING_SPLIT(sentence, ' ');

Il risultato è simile al seguente:

id valore
1 Questo
1 è
1 il
1 prima
1 frase.
2 E
2 ecco
2 il
2 altro
2 uno.

Discussione:

Questo esempio è molto simile, ma vuoi anche vedere l'id colonna. Per vedere questa colonna, aggiungila a SELECT list e ricordati di includere la virgola. Vedrai l'ID della frase insieme alle parti delle frasi nel risultato. Ad esempio, la prima frase è divisa in 5 parti e ha l'ID 1 . Quindi, l'ID di tutte e 5 le parti nella tabella dei risultati sarà 1 . La frase successiva, con l'ID 2 , è anche diviso in 5 parti e ciascuna di queste parti verrà mostrata con id = 2 .