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',';',',')


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值