借助个函数实现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
(
@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
(
@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
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 行受影响)*/