My google searches for how to split a string on a separator led to some useful functions for splitting strings when the string is known (i.e. see below):
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[Split] (@String varchar(8000), @Delimiter char(1)) returns @temptable TABLE (items varchar(8000)) as begin declare @idx int declare @slice varchar(8000) select @idx = 1 if len(@String)<1 or @String is null return while @idx!= 0 begin set @idx = charindex(@Delimiter,@String) if @idx!=0 set @slice = left(@String,@idx - 1) else set @slice = @String if(len(@slice)>0) insert into @temptable(Items) values(@slice) set @String = right(@String,len(@String) - @idx) if len(@String) = 0 break end return end
This works well for a known string, for example:
SELECT TOP 10 * FROM dbo.Split('This,Is,My,List',',')
However, I would like to pass the column to the function and combine it together with my other data in my own row ... for example, given the data:
CommaColumn ValueColumn1 ValueColumn2 ----------- ------------ ------------- ABC,123 1 2 XYZ, 789 2 3
I would like to write something like:
SELECT Split(CommaColumn,',') As SplitValue, ValueColumn1, ValueColumn2 FROM MyTable
And come back
SplitValue ValueColumn1 ValueColumn2 ---------- ------------ ------------ ABC 1 2 123 1 2 XYZ 2 3 789 2 3
Is this possible, or has anyone done this before?
sql sql-server-2005
Kyle ballard
source share