Store procedure per splittare un campo

di Anonimizzato11780 il
5 risposte
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

  • 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.!!.
  • 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
  • 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
  • Grazie.. mi hai salvato!!
    buona giornata
Devi accedere o registrarti per scrivere nel forum
5 risposte