Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [sql-server / t-sql] split su una stringa

    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

  2. #2
    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!?!

  3. #3
    SELECT * FROM [nome_db].[dbo].[fn_UTIL_Split]('a - b - c', ' - ')

    mi restitusice 3 righe
    a
    - b
    - c

    dove sbaglio??

    grazie

  4. #4
    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

  5. #5
    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!?!

  6. #6
    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

  7. #7
    Si ok, ora ho capito.
    Walter
    ---------------------------------
    Piove... Governo Ladro!?!

  8. #8
    Originariamente inviato da walter.boss
    Si ok, ora ho capito.
    ma a te funziona (con il mio separatore)?
    hai un'altra soluzione?

    grazie

  9. #9
    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!?!

  10. #10
    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!?!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.