Store procedure per splittare un campo

di il
5 risposte

Store procedure per splittare un campo

Buon giorno,
premesso che per me l'SQL è arabo ma mi ci devo cimentare per forza, passo al quesito..
ho trovato questo codice che splitta una stringa, ma a me serva che lo split vengo fatto su un campo del db e che le due parti dell'array vengano inserite in due campi di un'altra tabella. Non so dove inserire la query che dovrebbe essere "select nominativo from anagrafica" e nemmeno come gestire parametri i parametri..
Qualche buon samaritano dell'SQL può aiutarmi a modificare il codice che riporto di seguito?
grazie in anticipo..

USE [MyDB]
GO

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SplitString]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[SplitString]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[SplitString](@StringToSplit nvarchar (4000), @Separ nvarchar (10))

RETURNS @ValueTable TABLE ([Elem] nvarchar(4000))
BEGIN
DECLARE @NextString nvarchar(4000)
DECLARE @Pos int
DECLARE @NextPos int
DECLARE @CommaCheck nvarchar(1)

--Inizializzazione
SET @NextString = ''
SET @CommaCheck = right(@StringToSplit,1)
SET @StringToSplit = @StringToSplit + @Separ

--Rilevo la posizione del primo @Separ
SET @Pos = CHARINDEX(@Separ,@StringToSplit)
SET @NextPos = 1

--Loop while there is still a comma in the String of levels
WHILE (@pos <> 0)
BEGIN
SET @NextString = RTRIM(LTRIM(SUBSTRING(@StringToSplit,1,@Pos - 1)))

IF(@NextString <> '')
BEGIN
INSERT INTO @ValueTable ([Elem]) Values (@NextString)
END

SET @StringToSplit = SUBSTRING(@StringToSplit,@pos +1,len(@StringToSplit))

SET @NextPos = @Pos
SET @pos = CHARINDEX(@Separ,@StringToSplit)
END

RETURN
END
GO

SELECT * from [dbo].[SplitString]('Test;split;string;', ';')

5 Risposte

  • Re: Store procedure per splittare un campo

    Ciao,
    ma tutto sto casino x cosa?!?!
    
    select left(colonna,len(colonna)-5),right(colonna,5)
    from tabella
    
    dove
    len(colonna)-5 restituisce, partendo da sx, la tua stringa accorciata di 5
    right(colonna,5) restituisce, partendo da dx, la parte rimanente


    cmq la SP completa:
    
    --elimino se esiste la SP per poi sovrascriverla
    if  exists (select * from sys.objects where object_id=object_id(N'test_sp'))
    drop procedure dbo.test_sp
    
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    --creazione SP
    create PROCEDURE dbo.test_sp
    AS
    BEGIN
    
    	insert tabella2(colonna1,colonna2)
    	select left(colonna,len(colonna)-5),right(colonna,5)
            from tabella
    end
    
    poi x eseguire
    
    exec test_sp
    
    così dovrebbe fare, se ho capito bene, quello che volevi.!!.
  • Re: Store procedure per splittare un campo

    Ciao e grazie della risposta, tutto sto casino perchè quando si è ignoranti come una capra si fa casino.. cmq domani mattina provo.
    solo una domanda, l'idea era quella di splittare il campo in funzione dello spazio che divide nome e cognome mentre con il tuo sistema mi sembra di capire che venga presa una parte del campo in funzione della lunghezza. Non è così mi si trocano le stringhe in maniera non corretta?
    grazie
  • Re: Store procedure per splittare un campo

    Come immaginavo la store funziona ma le stringhe del campo vengono tagliate male..
    Forse nel primo post non mi ero spiegato bene il mio problema è quello descritto nel secondo cioè lo split del campo in funzione dello spazio che divide la stringa interna..
    Saresti così gentile da spiegarmi come posso procedere?
    grazie
  • Re: Store procedure per splittare un campo

    Ah si allora la cosa si complica...
    ma ecco qua qualcuno che aveva il tuo stesso prob.!

    http://www.databasejournal.com/features/mssql/article.php/3071531/Using-SQL-Servers-CHARINDEX-and-PATINDEX.htm

    app ho tempo provo e nel caso se ti serve ti aiuto a buttarla giù meglio.!
  • Re: Store procedure per splittare un campo

    Grazie.. mi hai salvato!!
    buona giornata
Devi accedere o registrarti per scrivere nel forum
5 risposte