借助个函数实现CREATE function uf_splitstr
(
@str varchar(8000) --要分拆的字符串
,@spli varchar(10) --字符串分隔符
)
returns varchar(8000)
as
begin
declare @s varchar(8000)
set @s=''
declare @retab table(istr varchar(8000))
declare @i     int
declare @splen int
select @splen=len(@spli),@i=charindex(@spli,@str)
while @i > 0
begin
insert into @retab 
values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
select @i=charindex(@spli,@str)
end
if @str<>'' insert into @retab values(@str)
select @s=@s+','+istr from (select distinct istr from @retab)t
set @s=stuff(@s,1,1,'')
return @s
end
go
select id,dbo.uf_splitstr('001,002,005,001,002',',') as B

解决方案 »

  1.   

    CREATE function uf_splitstr
    (
    @str varchar(8000) --要分拆的字符串
    ,@spli varchar(10) --字符串分隔符
    )
    returns varchar(8000)
    as
    begin
    declare @s varchar(8000)
    set @s=''
    declare @retab table(istr varchar(8000))
    declare @i     int
    declare @splen int
    select @splen=len(@spli),@i=charindex(@spli,@str)
    while @i > 0
    begin
    insert into @retab 
    values(left(@str,@i-1))
    select @str=substring(@str,@i+@splen,8000)
    select @i=charindex(@spli,@str)
    end
    if @str<>'' insert into @retab values(@str)
    select @s=@s+','+istr from (select distinct istr from @retab)t
    set @s=stuff(@s,1,1,'')
    return @s
    end
    go
    select id,dbo.uf_splitstr(B,',') as B
    from A
      

  2.   

    drop table a
    create table a
    (
    id int,
    col varchar(45)
    )
    insert into a 
    select 1,'001,002,005,001,002' union all
    select 2,'0200,0100,3600,0200,0100,3600,0200,0100,3600' union all
    select 3,'001,2541'
    gocreate function dbo.testfun(@id int)
    returns varchar(50)
    as 
    begin
    declare @t table(id int identity(1,1),b bit)
    insert into @t(b) select top 50 0 from syscolumns
    declare @r varchar(50)
    set @r=''
    select @r=@r+','+s from 
    (
    select substring(a.col,b.id,charindex(',',a.col+',',b.id)-b.id) s from a,@t b
    where a.id=@id and b.id<=len(a.col) and substring(','+a.col,b.id,1)=','
    group by substring(a.col,b.id,charindex(',',a.col+',',b.id)-b.id)
    ) tb order by s
    return (stuff(@r,1,1,''))
    endgo
    select id,cast(dbo.testfun(id) as varchar) as col  from a
    /*
    id          col
    ----------- ------------------------------
    1           001,002,005
    2           0100,0200,3600
    3           001,2541(3 行受影响)*/