必威SQL Server实现类似split功能。sql处理带分隔符的字符串数据。

代码很简短,贴出代码自己看吧,没得可说。

 

–示例:把”a,b,c,d,e”截取成”a”,”b”,”c”,”d”,”e”
declare@strvarchar(50)
set@str=’a,b,c,d,e’

–獲取被分隔符分割開來的字符串中參數的個數

whilelen(@str)>0
begin
printsubstring(@str,1,1)
declare@posiint
–先是个逗号出现的岗位
set@posi=charindex(‘,’,@str)
if@posi=0
break;
set@str=substring(@str,@posi+1,len(@str)-@posi)
–print @str
–print len(@str)
end

CREATE function GetStrArrayLength
(
 @str varchar(1024),  –要分的字符串
 @split varchar(10)  –分隔符号
)
returns int
as
begin
 declare @location int
 declare @start int
 declare @length int

出口结果:

 set @str=ltrim(rtrim(@str))–剔除字符串的前后空格

a
b
c
d
e

 set @location=charindex(@split,@str)–第一個分隔符在字符串中之目數字  例如’a1,b2,c3,d4’中率先個’,’的职务索引

–示例:把”a,b,c,d,e”截取成”a”,”b”,”c”,”d”,”e”

 set @length=1–字符串为分隔符分割開來的參數個數,這裡初始化為一個

declare @str varchar(50)

 while @location<>0 –如果字符串中還存在分隔符那麼該分隔符在字符串中之目就非會為0,也就是是匪等於0
 begin
   set @start=@location+1 –從第一個分隔符索引位置後的字符串中開始檢索,檢索的序幕是率先個分隔符後之均等各项開始
   set @location=charindex(@split,@str,@start)
   set @length=@length+1
 end
 return @length

set @str=’a,b,c,d,e’

end

–获得带分隔符的字符串中指定索引对应之间隔项
creat FUNCTION dbo.f_GetStr(
    @s varchar(8000),      –包含多个数据项的字符串
    @pos int,             –要博取的数目项的岗位
    @split varchar(10)     –数据分隔符
)RETURNS varchar(1000)
AS
BEGIN
    IF @s IS NULL RETURN(NULL)
    DECLARE @splitlen int
    SELECT @splitlen=LEN(@split+’a’)-2
    WHILE @pos>1 AND CHARINDEX(@split,@s+@split)>0
        SELECT @pos=@pos-1,
            @s=STUFF(@s,1,CHARINDEX(@split,@s+@split)+@splitlen,”)
    RETURN(ISNULL(LEFT(@s,CHARINDEX(@split,@s+@split)-1),”))
END

 


抱指定索引对应之间隔开来的单项字符数据

create function GetStr
(
 @str varchar(1024),  –要分开的字符串
 @split varchar(10),  –分隔符号
 @index int –取第几只元素
)
returns varchar(1024)
as
begin
 declare @location int
 declare @start int
 declare @next int
 declare @seed int

 set @str=ltrim(rtrim(@str))
 set @start=1
 set @next=1
 set @seed=len(@split)
 
 set @location=charindex(@split,@str)
 while @location<>0 and @index>@next
 begin
   set @start=@location+@seed
   set @location=charindex(@split,@str,@start)
   set @next=@next+1
 end
 if @location =0 select @location =len(@str)+1  
 return substring(@str,@start,@location-@start)
end

 

 

 

while len(@str)>0

begin

    print substring(@str,1,1)

    declare @posi int

    –先是个逗号出现的职

    set @posi=
charindex(‘,’,@str)

    if @posi=0

    break;

    set @str=substring(@str,@posi+1,len(@str)-@posi)

    –print @str

    –print len(@str)

end

相关文章