Sql实现数组效果

/*
说明:模拟数组函数
版本:ALL
作者:HUGO.CM(mingming0201@vip.qq.com
时间:2010年5月23日 18:21:31
注:本人也是在网上找的,做了下修改,所以大家可以任意转载。如果在本人的语句上做修改的话,也请发到我邮箱一份。非常感谢 
*/
Create function SplitStr
(
--要拆分的字符串
@SplitString varchar(8000),
--拆分标识
@Separator varchar(10)
)
returns @ReturnTable table([Index] int identity,Value varchar(50))
AS

BEGIN
declare @ThisSplitStr varchar(50) --拆分的字符串
declare @ThisSplitIndex int   --拆分的位置
declare @StartSplitIndex int  --开始拆分位置
declare @Index int     --拆分标识的字符长度 

select @StartSplitIndex = 0   --设置拆分开始的位置
select @Index = len(@Separator)  --获取标识字符长度

if Right(@SplitString ,@Index) <> @Separator
 select @SplitString = @SplitString + @Separator
 
select @ThisSplitIndex = CharIndex(@Separator, @SplitString, @StartSplitIndex)

while @StartSplitIndex <= @ThisSplitIndex
begin
 select @ThisSplitStr = SubString(@SplitString, @StartSplitIndex, @ThisSplitIndex - @StartSplitIndex)
 select @StartSplitIndex = @ThisSplitIndex + @Index
 select @ThisSplitIndex = CharIndex(@Separator, @SplitString, @StartSplitIndex)
 insert into @ReturnTable values(@ThisSplitStr)
end
return
END

go

select * from SplitStr('1,12,123,1234,12345',',')

 

go

 

 


Create function SplitStr2
(
--要拆分的字符串
@SplitString varchar(8000),
--拆分长度
@Index int 
)
returns @ReturnTable table([Index] int identity,Value varchar(50))
AS

BEGIN
declare @SplitStringIndex int
declare @ThisSplitStr varchar(50) --拆分的字符串
declare @ThisSplitIndex int   --拆分的位置
declare @StartSplitIndex int  --开始拆分位置 

select @SplitStringIndex = len(@SplitString)
select @StartSplitIndex = 1   --设置拆分开始的位置
select @ThisSplitIndex = @Index

while @StartSplitIndex <= @SplitStringIndex and @Index<>0
begin
         select @ThisSplitStr = SubString(@SplitString, @StartSplitIndex, @Index)
         select @StartSplitIndex = @StartSplitIndex + @Index       
         insert into @ReturnTable values(@ThisSplitStr)
end
return
END
go

 

 

posted @ 2010-05-23 22:44  HUGO.CM  阅读(227)  评论(0编辑  收藏  举报