Monday, 5 October 2015

UDF For Splitting Comma Seperated Values

CREATE FUNCTION [dbo].[fnSplit](   
    @sInputList VARCHAR(8000) -- List of delimited items   
  , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items   
) RETURNS @List TABLE (item VARCHAR(8000))   
   
BEGIN   
DECLARE @sItem VARCHAR(8000)   
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0   
 BEGIN   
 SELECT   
  @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),   
  @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))   
    
 IF LEN(@sItem) > 0   
  INSERT INTO @List SELECT @sItem   
 END   
   
IF LEN(@sInputList) > 0   
 INSERT INTO @List SELECT @sInputList -- Put the last item in   
RETURN   

END 


 SELECT * FROM dbo.[fnSplit]('1,2,3',',')




 Another Function for the Same Is:

CREATE FUNCTION [dbo].[Split](@String nvarchar(4000), @Delimiter char(1)) 
RETURNS @Results TABLE (Items nvarchar(4000)) 
AS 
BEGIN 
DECLARE @INDEX INT 
DECLARE @SLICE nvarchar(4000) 
-- HAVE TO SET TO 1 SO IT DOESNT EQUAL Z 
--     ERO FIRST TIME IN LOOP 
SELECT @INDEX =
WHILE @INDEX !=
BEGIN 
-- GET THE INDEX OF THE FIRST OCCURENCE OF THE SPLIT CHARACTER 
SELECT @INDEX = CHARINDEX(@Delimiter,@STRING) 
-- NOW PUSH EVERYTHING TO THE LEFT OF IT INTO THE SLICE VARIABLE 
IF @INDEX !=
SELECT @SLICE = LEFT(@STRING,@INDEX - 1) 
ELSE 
SELECT @SLICE = @STRING 
-- PUT THE ITEM INTO THE RESULTS SET 
INSERT INTO @Results(Items) VALUES(@SLICE) 
-- CHOP THE ITEM REMOVED OFF THE MAIN STRING 
SELECT @STRING = RIGHT(@STRING,LEN(@STRING) - @INDEX) 
-- BREAK OUT IF WE ARE DONE 
IF LEN(@STRING) = 0 BREAK 
END 
RETURN 
END 

 Now Execute the Function
  
SELECT * FROM dbo.[Split]('1-2-3','-')


Related Posts:

  • Schema in SQL Server 2012 IntroductionIn this article I describe schemas in SQL Server 2012. A schema is like a container that contains database objects like tables, views etc. So let us learn about schemas, creation of schemas, how to alter schemas … Read More
  • Built-in Functions (Transact-SQL) CHARINDEX - Searches an expression for another expression and returns its starting position if found. DECLARE @FullName VARCHAR(100) SET @FullName = 'Clark Kent' select CHARINDEX(' ', @FullName) Output – 6 STUFF… Read More
  • UDF For Splitting Comma Seperated Values CREATE FUNCTION [dbo].[fnSplit](        @sInputList VARCHAR(8000) -- List of delimited items      , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items&nbs… Read More
  • Delete duplicate rows in SQL Server Introduction Some time some duplicate data may inserted in the SQL table. But its harmful for you and your application too. So how to remove the duplicate rows in your table. Description Take a look in the following tabl… Read More
  • SET NOCOUNT Stops the message that shows the count of the number of rows affected by a Transact-SQL statement or stored procedure from being returned as part of the result set.Syntax: SET NOCOUNT { ON | OFF } RemarksWhen SET NOCOUN… Read More

1 comment: