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

请问SQL中有无象split这样的分割函数?
如上,RT

------解决方案--------------------
create function FUN_splitStr(@str 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, @str)> 0
begin
insert @re values( left(@str, charindex(@split, @str)-1) )
set @str=stuff(@str, 1, charindex(@split, @str)+@splitLen, ' ')
end
insert @re values(@str)
return
end
------解决方案--------------------
给两个例子:

-------将一个字符串,按‘.’分割开
declare @AllChar varchar(50)
declare @FirstChar varchar(50)
declare @FirstPoint int
declare @lenth int

set @AllChar= 'afdsf.ASDFRE.WR.QWRQW.A.DSF.EW.QR.EWR ' ----可以传入一个字符串
set @lenth=len(@AllChar)
create table #Temp_String(FID int identity,Content varchar(50))
set @FirstPoint=charindex( '. ',@AllChar)

while( @FirstPoint> 0)
begin
set @FirstChar=substring(@AllChar,0,@FirstPoint)
--select @FirstChar
insert into #Temp_String(Content) values (@FirstChar)
set @AllChar=substring(@AllChar,@FirstPoint+1,@lenth)
set @FirstPoint=charindex( '. ',@AllChar)
end

insert into #Temp_String(Content) values (@AllChar)
select * from #Temp_String
drop table #Temp_String


--输出结果
1afdsf
2ASDFRE
3WR
4QWRQW
5A
6DSF
7EW
8QR
9EWR


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

create FUNCTION dbo.f_splitSTR(
@s varchar(8000), --要分拆的字符串
@split varchar(10), --数据分隔符
@pos int -- 取第几个
)RETURNS varchar(100)
AS
BEGIN
DECLARE @splitlen int, @re varchar(100)
SET @splitlen=LEN(@split+ 'a ') - 2
WHILE CHARINDEX(@split,@s) > 0 AND @pos > 0
SELECT
@re = LEFT(@s,CHARINDEX(@split,@s)-1),
@s=STUFF(@s,1,CHARINDEX(@split, @s)+@splitlen, ' '),
@pos = @pos - 1
RETURN(CASE
WHEN @pos = 0 THEN @re
WHEN @pos = 1 THEN @s
ELSE NULL END)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

----现在要求返回,第5个 ,到未尾的数字
select dbo.f_splitSTR( ',4,57,5645,45,545 ', ', ',6)
----返回第4个“,”到第5个“,”之间的数字
select dbo.f_splitSTR( ',4,57,5645,45,545 ', ', ',5)