In T-SQL è disponibile la funzione string_split che permette di splittare una stringa in base a un separatore per creare una tabella

T-SQL

DECLARE @text nvarchar(100) = 'Prova    di split     di una stringa ';
	
SELECT [value]
FROM string_split(@text, ' ')
che da come risultato questa tabella

Text

value
----------------------------------------------------------------------------------------------------
Prova



di
split




di
una
stringa


(14 rows affected)

Sicuramente non serve avere le righe vuote, quindi si può aggiungere una where per filtrare i risultati

T-SQL

DECLARE @text nvarchar(100) = 'Prova    di split     di una stringa ';

SELECT [value]
FROM string_split(@text, ' ')
WHERE RTRIM(value) <> '';
che da come risultato questa tabella

Text

value
----------------------------------------------------------------------------------------------------
Prova
di
split
di
una
stringa

(6 rows affected)
Questa è un alternativa all'uso di replace e trim SET @Text = rtrim(ltrim(REPLACE(REPLACE(@text, ' ', ' '), ' ', ' ')));

A volte può tornare utile avere una numerazione delle righe/parole, per far questo si può usare una tabella temporanea con un campo di tipo identity

T-SQL

DECLARE @text nvarchar(100) = 'Prova    di split     di una stringa';
-- dichiaro una variabile di tipo tabella
DECLARE @Tbl TABLE (
	[RowNumber] int identity(1,1),
	[Word] nvarchar(50)
);
-- inserisco le parole
INSERT INTO @Tbl
SELECT [value]
FROM string_split(@text, ' ')
WHERE RTRIM(value) <> '';
-- visualizzo il risultato
SELECT *
FROM @Tbl;
che da come risultato questa tabella

Text

RowNumber   Word
----------- --------------------------------------------------
1           Prova
2           di
3           split
4           di
5           una
6           stringa

(6 rows affected)
Tags:
Esempi225 SQL90 SQL Server100 T-SQL66
Potrebbe interessarti anche: