in una stored procedure ho delle stringhe simili a questa: "primo valore -
secondo valore - terzo valore"
come si fa a fare uno split sul separatore " - " e ottenere le n stringhe
separate da " - "??
grazie
in una stored procedure ho delle stringhe simili a questa: "primo valore -
secondo valore - terzo valore"
come si fa a fare uno split sul separatore " - " e ottenere le n stringhe
separate da " - "??
grazie
Io mi sono fatto una funzione personalizzata. Vedi se ti serve...
CREATE function dbo.fn_UTIL_Split
(
@myString varchar(8000),
@Delimiter varchar (10)
)
returns @ValueTable table ([Value] varchar(8000))
begin
declare @NextString varchar(8000)
declare @Pos int
declare @NextPos int
declare @CommaCheck nvarchar(1)
--Initialize
set @NextString = ''
set @CommaCheck = right(@myString,1)
--Check for trailing Comma, if not exists, INSERT
--if (@CommaCheck <> @Delimiter )
set @myString = @myString + @Delimiter
--Get position of first Comma
set @Pos = charindex(@Delimiter,@myString)
set @NextPos = 1
--Loop while there is still a comma in the String of levels
while (@pos <> 0)
begin
set @NextString = substring(@myString,1,@Pos - 1)
insert into @ValueTable ( [Value]) Values (@NextString)
set @myString = substring(@myString,@pos +1,len(@myString))
set @NextPos = @Pos
set @pos = charindex(@Delimiter,@myString)
end
return
end
Walter
---------------------------------
Piove... Governo Ladro!?!
SELECT * FROM [nome_db].[dbo].[fn_UTIL_Split]('a - b - c', ' - ')
mi restitusice 3 righe
a
- b
- c
dove sbaglio??
grazie
ho messo
set @myString = substring(@myString,@pos +1+len(@Delimiter),len(@myString))
al posto di
set @myString = substring(@myString,@pos +1,len(@myString))
con il mio delimitatore funziona ma non è generalizzata
Non capisco perchè non sia generalizzata... Se hai un delimitatore lungo 10 ne conta la lunghezza e fa la substring, potresti essere più chiaro per favore?
Walter
---------------------------------
Piove... Governo Ladro!?!
hai provato a usare la tua funzione
con questi valori:
@myString ='a - b - c'
@Delimiter =' - '
a me non funzionava e allora ho apportato quella modifica che vale solo per il delimitatore ' - '
capito che intendo?
grazie
Si ok, ora ho capito.
Walter
---------------------------------
Piove... Governo Ladro!?!
ma a te funziona (con il mio separatore)?Originariamente inviato da walter.boss
Si ok, ora ho capito.
hai un'altra soluzione?
grazie
La soluzione è di togliere gli spazi dal separatore e di fare una trim prima dell'insert nella tabella temporanea, per esempio...
Walter
---------------------------------
Piove... Governo Ladro!?!
Scusami, sarò più preciso...
richiami la funzione in questo modo:
select * from fn_util_split('a - b - c','-')
e poi quando fai la insert all'interno della funzione fai una LTRIM(RTRIM(#VALORE#))
Ecco tutto...
Walter
---------------------------------
Piove... Governo Ladro!?!