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