日期:2014-05-19  浏览次数:20463 次

怎么提取两个字符之间的内容?
如;aa;bbb;c;dddd

得到

aa
bbb
c
dddd

------解决方案--------------------
使用Split字符串方法
------解决方案--------------------
declare @str varchar(100)
declare @t table(name varchar(10))
set @str = 'aa;bbb;c;dddd '

while charindex( '; ',@str + '; ')> 0
begin
insert @t select substring(@str,1,charindex( '; ',@str + '; ')-1)
set @str = stuff(@str,1,charindex( '; ',@str + '; '), ' ')
end
select * from @t

/*
aa
bbb
c
dddd
*/
------解决方案--------------------
Create Table A
(IText Varchar(100))
Insert A Select 'aa;bbb;c;dddd '
GO
Select Top 1000 ID = Identity(Int, 1, 1) Into #T From Syscolumns A, Syscolumns B

Select
IText = Substring(A.IText, B.ID, CharIndex( '; ', A.IText + '; ', B.ID) - B.ID)
From A, #T B
Where Substring( '; ' + a.IText, B.id, 1) = '; '
Order By IText

Drop Table #T
GO
Drop Table A
--Result
/*
IText
aa
bbb
c
dddd
*/


------解决方案--------------------
如果數據量不大,可以用While做循環的方式,但是如果數據量比較大,可以使用借用臨時表的方式。
------解决方案--------------------
create function f_splitStr(@s varchar(8000),@split varchar(10))
returns @tb table(col varchar(100))
as
begin
declare @t table(id int identity,b bit)
insert @t select top 500 0 from syscolumns a,syscolumns b

insert @tb select substring(@s,id,charindex(@split,@s+@split,id)-id)
from @t
where id <=len(@s+ '! ') and charindex(@split,@split+@s,id)=id

return
end
go

select * from dbo.f_splitStr( 'aa;bbb;c;dddd ', '; ')

col
--------
aa
bbb
c
dddd