/* 作者:htl258(Tony) 标题:字符拆分应用实例 内容:字符串 1,11,111,1111 怎么用sql语句转换为000001,000011,000111,001111 共六位,不足六位的在前面填上0 时间:2009-09-06 09:42 */ --创建自定义函数 If object_id('dbo.fn_split')is not null Drop function dbo.fn_split Go Create function dbo.fn_split ( @str varchar(8000), --输入的字符串 @flag varchar(10), --拆分标识 @num int --补位数量 ) returns varchar(1000) as begin declare @s varchar(1000) --用于存储返回的值 set @str=@str+@flag --将字符串尾加上 while charindex(@flag,@str)>1 --当至少存在一个以上非@flag字符时才循环截取 begin set @s=isnull(@s+@flag,'')+right(replicate('0',@num)+left(@str,charindex(@flag,@str)-1),@num) set @str=stuff(@str,1,charindex(@flag,@str),'') end return @s end go --调用函数 declare @a varchar(50),@b varchar(50) select @a='1,11,111,1111',@b='22/11/223/4/5555/666666///' select dbo.fn_split(@a,',',6) as a,dbo.fn_split(@b,'/',6) as b --结果: /* a b --------------------------- ----------------------------------------- 000001,000011,000111,001111 000022/000011/000223/000004/005555/666666 (1 行受影响) */ --字符串内多个标识符重复去重截取 --创建自定义函数 If object_id('dbo.fn_split')is not null Drop function dbo.fn_split Go Create function dbo.fn_split ( @str varchar(8000), --输入的字符串 @flag varchar(10), --拆分标识 @num int --补位数量 ) returns varchar(1000) as begin declare @s varchar(1000) --用于存储返回的值 set @str=@str+@flag --将字符串尾加上 while charindex(@flag,@str)>0 begin if charindex(@flag,@str)>1 --当至少存在一个以上非@flag字符时才循环赋值 begin set @s=isnull(@s+@flag,'')+right(replicate('0',@num)+left(@str,charindex(@flag,@str)-1),@num) end set @str=stuff(@str,1,charindex(@flag,@str),'') end return @s end go --调用函数 declare @a varchar(50),@b varchar(50) select @a=',,1,11,111,,,,1111',@b='/22/11/223/4/5555//666666///' select dbo.fn_split(@a,',',6) as a,dbo.fn_split(@b,'/',6) as b --结果: /* a b --------------------------- ----------------------------------------- 000001,000011,000111,001111 000022/000011/000223/000004/005555/666666 (1 行受影响) */