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