小小问题集锦4--拆分一个字符串的方法


/*

****拆分一个字符串*********

问题描述:

@str='fds,bbbf,eee,ddd,fff,hhhfg,dddde'  拆分成

col

------------------------

fds

bbbf

eee

ddd

fff

hhhfg

dddde

*/

---方法:动态

declare  @str  varchar(500),@aaa varchar(8000)

set  @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde' 

set @aaa='select * from (select '''+REPLACE(@str,',',''' as str union all select ''')+''') a '

exec(@aaa) 

go

--方法:循环

create  table  #t( 

id  varchar(10)) 

declare  @str  varchar(300) 

set  @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde' 

declare  @i  int 

declare  @len  int 

set  @i  =  1 

while  @i  <  len(@str+',') 

begin 

   insert  #t  select  substring(@str+',',@i,charindex(',',@str+',',@i)-@i) 

   set  @i  =  charindex(',',@str+',',@i)+1 

end 

select * from #t

drop table #t

go

--or

CREATE FUNCTION f_splitSTR(

@s   varchar(8000),   --待分拆的字符串

@split varchar(10)     --数据分隔符

)RETURNS @re TABLE(col varchar(100))

AS

BEGIN

DECLARE @splitlen int

SET @splitlen=LEN(@split+'a')-2

WHILE CHARINDEX(@split,@s)>0

BEGIN

INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))

SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')

END

INSERT @re VALUES(@s)

RETURN

END

GO

--方法:使用临时性分拆辅助表法

CREATE FUNCTION f_splitSTR(

@s   varchar(8000),  --待分拆的字符串

@split varchar(10)     --数据分隔符

)RETURNS @re TABLE(col varchar(100))

AS

BEGIN

--创建分拆处理的辅助表(用户定义函数中只能操作表变量)

DECLARE @t TABLE(ID int IDENTITY,b bit)

INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b


INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)

FROM @t

WHERE ID<=LEN(@s+'a')

AND CHARINDEX(@split,@split+@s,ID)=ID

RETURN

END

GO

declare  @str  varchar(500),@aaa varchar(8000)

set  @str='fds,bbbf,eee,ddd,fff,hhhfg,dddde' 

select * from dbo.f_splitSTR(@str,',')

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/feixianxxx/archive/2010/01/27/5263341.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值