Skip to content Skip to sidebar Skip to footer

Split String Put Into An Array

I am working on a SQL Server face problem which is splitting a string. I want to implement a function to split a string into an array: Declare @SQL as varchar(4000) Set @SQL='34545

Solution 1:

Split function from Here

CREATEFUNCTION [dbo].[fnSplitString] 
( 
    @string NVARCHAR(MAX), 
    @delimiterCHAR(1) 
) 
RETURNS@outputTABLE(splitdata NVARCHAR(MAX) 
) 
BEGINDECLARE@startINT, @endINTSELECT@start=1, @end= CHARINDEX(@delimiter, @string) 
    WHILE @start< LEN(@string) +1BEGIN 
        IF @end=0SET@end= LEN(@string) +1INSERTINTO@output (splitdata)  
        VALUES(SUBSTRING(@string, @start, @end-@start)) 
        SET@start=@end+1SET@end= CHARINDEX(@delimiter, @string, @start)

    ENDRETURNEND

Selecting from the function:

select*FROM dbo.fnSplitString('3454545,222,555', ',')

Returns

splitdata 
--------
3454545 
222
555

Then using a cursor or a while loop assign each individual to a variable if you wish. A table is in-essence an array already.

Solution 2:

--input

SELECT*FROM     SplitStringShamim('A,B,C,DDDDDD,EEE,FF,AAAAAAA', ',')


createFUNCTION [dbo].[SplitStringShamim]
(
    @Stringvarchar(max)
,   @Separatorvarchar(10)
)

RETURNS@DataSourceTABLE
(
    [ID] TINYINT IDENTITY(1,1)
   ,[Value] NVARCHAR(128)
)   
ASbeginDECLARE@Value NVARCHAR(MAX) =@StringDECLARE@XML xml = N'<r><![CDATA['+ REPLACE(@Value, @Separator, ']]></r><r><![CDATA[') +']]></r>'INSERTINTO@DataSource ([Value])
                    SELECT RTRIM(LTRIM(T.c.value('.', 'NVARCHAR(128)')))
                    FROM@xml.nodes('//r') T(c)

        returnend

Solution 3:

I have use some similar, but i put in into a table, so i have do like this way:

-----------------------------------6----3---4----3---3----4------------------------------------------declare@cadenavarchar(max) ='112331,211,1233,124,533,6341';      
declare@delimitadoraschar(1) =',';  
declare@finalasint= len(@cadena), @longitudMinimaasint= len(reverse(substring(reverse(@cadena),0,charindex(@delimitador,reverse(@cadena)))));
declare@outputastable(splits varchar(10));   

/*si no tiene delimitador no tiene sentido, es solo un elemento*/
if charindex(@delimitador,@cadena)>0begin       
        print 'la cadena tiene'+cast(@finalasvarchar(10)) +',deberá llegar a:'+cast(@longitudMinimaasvarchar(10));
        /*se manda hasta la longitud del ultimo elemento*/
        while @final<>@longitudMinimabegin/*mientras se pueda parsear con substring*/
            if charindex(@delimitador,@cadena)>0begin/*se obtiene elemento de la cadena y la longitud desciende pues la cadena se reduce
                 *cuando se quita este elemento en el substring*/declare@elementasvarchar(100) =substring(@cadena,1,charindex(@delimitador,@cadena)-1);
                set@final= len(@cadena);
                set@cadena=substring(@cadena,charindex(@delimitador,@cadena)+1,@final);
                print 'agregando elemento:'+@element+'--cadena:'+@cadena+'--final:'+cast(@finalasvarchar(10));
            endelsebeginset@final= len(@cadena);
                print 'terminando en elemento:'+@cadena+'--cadena:'+@cadena+'--final:'+cast(@finalasvarchar(10));               
            endendendelsebegin
        print 'elemento:'+@cadena+'--cadena:'+@cadena;
    end

to create the function i do this

createfunction [dbo].[returnTableFromString](
    @cadenaasvarchar(max),
    @delimitadoraschar(1)
)
returns@outputtable(splits varchar(100))
begindeclare@finalasint= len(@cadena), @longitudMinimaasint= len(reverse(substring(reverse(@cadena),0,charindex(@delimitador,reverse(@cadena)))));            
    /*si no tiene delimitador no tiene sentido, es solo un elemento*/
    if charindex(@delimitador,@cadena)>0begin--print 'la cadena tiene' + cast(@final as varchar(10)) + ',deberá llegar a:' + cast(@longitudMinima as varchar(10));/*se manda hasta la longitud del ultimo elemento*/
            while @final<>@longitudMinimabegin/*mientras se pueda parsear con substring*/
                if charindex(@delimitador,@cadena)>0begin/*se obtiene elemento de la cadena y la longitud desciende pues la cadena se reduce
                     *cuando se quita este elemento en el substring*/declare@elementasvarchar(100) =substring(@cadena,1,charindex(@delimitador,@cadena)-1);
                    set@final= len(@cadena);
                    set@cadena=substring(@cadena,charindex(@delimitador,@cadena)+1,@final);
                    insertinto@outputvalues (@element)                   
                endelsebeginset@final= len(@cadena);
                    insertinto@outputvalues (@cadena)                    
                endendendelsebegininsertinto@outputvalues (@cadena);
        endreturnend

Post a Comment for "Split String Put Into An Array"