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"