sql server函数实现把分隔字符串转成表格

1.

CREATE FUNCTION [dbo].[GetTableFromString] 
(	
	-- Add the parameters for the function here
	@sourceStr nvarchar(max) 
)
RETURNS @Table_NameList table ( Name Varchar(max))  -- 建立表变量 
AS
BEGIN
	Declare @Index_Param int   /*参数 记录分隔符的位置*/
	Declare @NeedParse varchar(max) /*参数 没有处理的字符串*/
	if(@sourceStr is NULL OR Ltrim(Rtrim(@sourceStr))='')
		return
	Select  @Index_Param=CharIndex(',', @sourceStr)
	if (@Index_Param=0)
	begin        /*一个名字组成*/
		insert into @Table_NameList (Name) values(@sourceStr)
	end
	else   /*存在多个名字*/
	begin
		set @NeedParse =@sourceStr
		while (CharIndex(',', @NeedParse)>0)
		begin
			insert into @Table_NameList (Name) values(SubString(@NeedParse,1,CharIndex(',',@NeedParse)-1))
			set @NeedParse =SubString(@NeedParse,CharIndex(',', @NeedParse)+1,len(@NeedParse)-CharIndex(',', @NeedParse))
		end
		if(len(@NeedParse)>0)
			insert into @Table_NameList (Name) values(@NeedParse)
	end
	return
END


2.

CREATE FUNCTION [dbo].[GetTableFromStringBySplit] 
(	
	-- Add the parameters for the function here
	@sourceStr nvarchar(max),
	@splitStr nvarchar(max)=',' 
)
RETURNS @Table_NameList table ( Name Varchar(max))  -- 建立表变量 
AS
BEGIN
	Declare @Index_Param int   /*参数 记录分隔符的位置*/
	Declare @NeedParse varchar(max) /*参数 没有处理的字符串*/
	declare @splitLength int
	
	set @splitLength = len(@splitStr)
	if(@sourceStr is NULL OR Ltrim(Rtrim(@sourceStr))='')
		return
	Select  @Index_Param=CharIndex(@splitStr, @sourceStr)
	if (@Index_Param=0)
	begin        /*一个名字组成*/
		insert into @Table_NameList (Name) values(@sourceStr)
	end
	else     /*存在多个名字*/
	begin
		set @NeedParse =@sourceStr
		while (CharIndex(@splitStr, @NeedParse)>0)
		begin
			insert into @Table_NameList (Name) values(SubString(@NeedParse,1,CharIndex(@splitStr,@NeedParse)-1))
			set @NeedParse =SubString(@NeedParse,CharIndex(@splitStr, @NeedParse)+@splitLength,len(@NeedParse)-CharIndex(@splitStr, @NeedParse))
		end
		if(len(@NeedParse)>0)
			insert into @Table_NameList (Name) values(@NeedParse)
	end
	return
END

3.

CREATE FUNCTION [dbo].[GetTableFromStringBySplitAndChildSplit] 
(	
	-- Add the parameters for the function here
	@sourceStr nvarchar(max),
	@splitStr nvarchar(max)=',',
	@valueSplitStr nvarchar(max)=':'
)
RETURNS @Table_NameList table (ID int, Name nVarchar(max))  -- 建立表变量 
AS
BEGIN
	Declare @Index_Param int   /*参数 记录分隔符的位置*/
	Declare @NeedParse nvarchar(max) /*参数 没有处理的字符串*/
	declare @splitLength int
	declare @sourceSplitedStr nvarchar(max)
	declare @childSplitIndex int
	
	set @splitLength = len(@splitStr)
	if(@sourceStr is NULL OR Ltrim(Rtrim(@sourceStr))='')
		return
	Select  @Index_Param=CharIndex(@splitStr, @sourceStr)
	if (@Index_Param=0)
	begin        /*一个名字组成*/
		set @childSplitIndex = CharIndex(@valueSplitStr,@sourceStr)
		set @sourceSplitedStr = @sourceStr
		--insert into @Table_NameList (Name) values(@sourceStr)
		insert into @Table_NameList (ID,Name) values(SubString(@sourceSplitedStr,1,@childSplitIndex-1),SubString(@sourceSplitedStr,@childSplitIndex + 1,len(@sourceSplitedStr)))
	end
	else     /*存在多个名字*/
	begin
		set @NeedParse =@sourceStr
		while (CharIndex(@splitStr, @NeedParse)>0)
		begin
			set @childSplitIndex = CharIndex(@valueSplitStr,@NeedParse)
			set @sourceSplitedStr = SubString(@NeedParse,1,CharIndex(@splitStr,@NeedParse)-1)
			--insert into @Table_NameList (Name) values(SubString(@NeedParse,1,CharIndex(@splitStr,@NeedParse)-1))
			insert into @Table_NameList (ID,Name) values(SubString(@sourceSplitedStr,1,@childSplitIndex-1),SubString(@sourceSplitedStr,@childSplitIndex + 1,len(@sourceSplitedStr)))
			set @NeedParse =SubString(@NeedParse,CharIndex(@splitStr, @NeedParse)+@splitLength,len(@NeedParse)-CharIndex(@splitStr, @NeedParse))
		end
		if(len(@NeedParse) > 0)
		begin
			set @childSplitIndex = CharIndex(@valueSplitStr,@NeedParse)
			set @sourceSplitedStr = @NeedParse
			--insert into @Table_NameList (Name) values(@NeedParse)
			insert into @Table_NameList (ID,Name) values(SubString(@sourceSplitedStr,1,@childSplitIndex-1),SubString(@sourceSplitedStr,@childSplitIndex + 1,len(@sourceSplitedStr)))
		end
	end
	return
END

select * from dbo.[GetTableFromStringBySplitAndChildSplit]('1,a;2,b;3,c',';',',')
sql server函数实现把分隔字符串转成表格_第1张图片

你可能感兴趣的:(sql)