SQL自定义函数split
Create Function Split(@Strs As Nvarchar(1024),@Separator as Nvarchar(10),@Index as Int)
Returns Nvarchar(1024) As
begin
Declare @i As Int, @charpos As Nvarchar(1024)
Set @charpos = @Strs
Set @i = 1
If @Index < 0
Begin
Set @charpos = '超出下界'
End
Else
Begin
While @i <= (@Index - 1)
Begin
If CharIndex(@Separator, @charpos) > 0
Begin
Set @charpos = Substring(@charpos, CharIndex(@Separator, @charpos) + 1, Len(@charpos) - CharIndex(@Separator, @charpos))
End
Else
Begin
Set @charpos = '超出上界'
Break
End
Set @i = @i + 1
End
If @charpos <> '超出上界'
Begin
If CharIndex(@Separator, @charpos) > 0
Begin
Set @charpos = Left(@charpos, CharIndex(@Separator, @charpos) - 1)
End
End
End
Return @charpos
End
--调用
select dbo.Split('sdf|abc|csc|aldsfj|sfj|取出原素|asdf|adf|...','|',6)
--返回 取出原素
Returns Nvarchar(1024) As
begin
Declare @i As Int, @charpos As Nvarchar(1024)
Set @charpos = @Strs
Set @i = 1
If @Index < 0
Begin
Set @charpos = '超出下界'
End
Else
Begin
While @i <= (@Index - 1)
Begin
If CharIndex(@Separator, @charpos) > 0
Begin
Set @charpos = Substring(@charpos, CharIndex(@Separator, @charpos) + 1, Len(@charpos) - CharIndex(@Separator, @charpos))
End
Else
Begin
Set @charpos = '超出上界'
Break
End
Set @i = @i + 1
End
If @charpos <> '超出上界'
Begin
If CharIndex(@Separator, @charpos) > 0
Begin
Set @charpos = Left(@charpos, CharIndex(@Separator, @charpos) - 1)
End
End
End
Return @charpos
End
--调用
select dbo.Split('sdf|abc|csc|aldsfj|sfj|取出原素|asdf|adf|...','|',6)
--返回 取出原素
将数组(分隔字符串)返回阵列(表)



























































































--返回结果
idx [value]
0 china 中国
1 %…-- desefd
2 e 中国人fddc
3 mgns
4 a a
上面的判断太多了不易于理解,下面转了一个简单的意思基本相同代码简单很多
-- =============================================
-- Author: 阿瑞
-- Create date: 2008-03-19
-- Description: split函数
-- Debug:select * from dbo.Fun_Split('ABC:BC:C:D:E',':')
-- =============================================
CREATE FUNCTION [dbo].[Fun_Split]
(
@SourceSql varchar(8000),
@StrSeprate varchar(10)
)
RETURNS
@TEMP_Table TABLE (a varchar(100))
AS
BEGIN
DECLARE @i int
SET @SourceSql=rtrim(ltrim(@SourceSql))
SET @i=charindex(@StrSeprate,@SourceSql)
WHILE @i>=1
BEGIN
INSERT @TEMP_Table VALUES(left(@SourceSql,@i-1))
SET @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
SET @i=charindex(@StrSeprate,@SourceSql)
END
if @SourceSql<>'/'
INSERT @TEMP_Table values(@SourceSql)
RETURN
END
-- Author: 阿瑞
-- Create date: 2008-03-19
-- Description: split函数
-- Debug:select * from dbo.Fun_Split('ABC:BC:C:D:E',':')
-- =============================================
CREATE FUNCTION [dbo].[Fun_Split]
(
@SourceSql varchar(8000),
@StrSeprate varchar(10)
)
RETURNS
@TEMP_Table TABLE (a varchar(100))
AS
BEGIN
DECLARE @i int
SET @SourceSql=rtrim(ltrim(@SourceSql))
SET @i=charindex(@StrSeprate,@SourceSql)
WHILE @i>=1
BEGIN
INSERT @TEMP_Table VALUES(left(@SourceSql,@i-1))
SET @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
SET @i=charindex(@StrSeprate,@SourceSql)
END
if @SourceSql<>'/'
INSERT @TEMP_Table values(@SourceSql)
RETURN
END
调用:select * from dbo.Fun_Split('ABC:BC:C:D:E',':')
结果: