Click here to Skip to main content
15,891,372 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I wanna split a field value(seperated by semicolon) and save it in an array
Eg :
189;217;189;199;

And help me to retrieve it one by one and save on a temporary table
Like
row_num--value
---1-------189
---2-------217
---3-------189
---4-------199
Posted

Try this ...

SQL
DECLARE @param VARCHAR(MAX) = '189;217;189;199;';
SET @param = SUBSTRING(@param,0,LEN(@param))

DECLARE @Xparam XML;

SELECT @Xparam = CAST('<i>' + REPLACE(@param,';','</i><i>') + '</i>' AS XML)
SELECT ROW_NUMBER() OVER( ORDER BY x.i.value('.','INT')) ROWNUM,x.i.value('.','INT') FROM @Xparam.nodes('//i') x(i)


Thank you
 
Share this answer
 
Create this function in your database
SQL
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[ParseValues]
(@String varchar(8000), @Delimiter varchar(10) )
RETURNS @RESULTS TABLE (ID int identity(1,1), Val varchar(50))
AS
BEGIN
    DECLARE @Value varchar(100)
    WHILE @String is not null
    BEGIN
        SELECT @Value=CASE WHEN PATINDEX('%'+@Delimiter+'%',@String) >0 THEN LEFT(@String,PATINDEX('%'+@Delimiter+'%',@String)-1) ELSE @String END, @String=CASE WHEN PATINDEX('%'+@Delimiter+'%',@String) >0 THEN SUBSTRING(@String,PATINDEX('%'+@Delimiter+'%',@String)+LEN(@Delimiter),LEN(@String)) ELSE NULL END
        INSERT INTO @RESULTS (Val)
        SELECT @Value
    END
    RETURN
END


Now, call this function like below,
SQL
select * from dbo.parsevalues('189;217;189;199;',';') where val<>''

Happy Coding!
:)
 
Share this answer
 
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900