In
T-SQL è disponibile la funzione
string_split che permette di
splittare una stringa in base a un separatore per creare una tabella
DECLARE @text nvarchar(100) = 'Prova di split di una stringa ';
SELECT [value]
FROM string_split(@text, ' ')
che da come risultato questa tabella
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
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
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
identityDECLARE @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
RowNumber Word
----------- --------------------------------------------------
1 Prova
2 di
3 split
4 di
5 una
6 stringa
(6 rows affected)