1. 程式人生 > > SQL Server 2005中拆分逗號分隔的字串或把逗號分隔的字串拆成資料表的函式

SQL Server 2005中拆分逗號分隔的字串或把逗號分隔的字串拆成資料表的函式

  在寫查詢語句時,大家都會遇到多個值的情況如多選列表表單(select),這時就如果又是在呼叫儲存過程,由於SQL不支援陣列,這時將無法實現.所以建立了兩個表值函式可以以指定的分隔符來將 分隔後的子 字串儲存在表中以便於使用.現釋出與大家共享.

CREATE function fn_SplitChars(@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a varchar(20)) --實現split功能的函式,拆分為Varchar型別 as begin declare @i int set @SourceSql=rtrim(ltrim(UPPER(@SourceSql))) set @i=charindex(@StrSeprate,@SourceSql) while @i>=1 begin insert @temp values(rtrim(ltrim(left(@SourceSql,@i-1)))) set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)[email protected]) set @i=charindex(@StrSeprate,@SourceSql) end if @SourceSql<>'' insert @temp values(ltrim(@SourceSql)) return end CREATE function [dbo].[fn_SplitNumbers](@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a int) --實現split功能 的函式,拆分為Int型別 as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@SourceSql) while @i>=1 begin insert @temp values(rtrim(ltrim(left(@SourceSql,@i-1)))) set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)[email protected]) set @i=charindex(@StrSeprate,@SourceSql) end if @SourceSql<>'' insert @temp values(ltrim(@SourceSql)) return end

呼叫方法如下

 select * from Songs where SingerID in (select * from dbo.fn_splitNumbers('1,3,5',',')); select * from Songs x inner join Singers y on x.SingerID=y.SingerID where Singer in (select * from dbo.fn_splitChars('s.h.e,周杰倫',','));