妙用 T-SQL: PARSENAME 函数 (也可不使用该函数,鸣谢"小杰") 实现按指定分隔符拆分字符串 SplitString

20050519 修订为不使用 PARSENAME ,鸣谢楼下的"小杰"网友: !@#$%^&*!
且支持分隔符支持任意长度!

ALTER function dbo.UDF_SplitSubString 

 
@Expression varchar(8000
,
@Delimiter varchar(100
,@ 
int 

returns varchar(8000
as 
begin 
--declare @Expression varchar(8000) 
--
set @Expression = 'abc@@pppp@aa' 
--
declare @Delimiter varchar(100) 
--
set @Delimiter = '@@@'
--
declare @ int 
--
set @ = 3

declare @p int 
set @p = CharIndex(@Delimiter,@Expression
if @p > 0
begin
   
set @p = @p + len(@Delimiter- 1
end
declare @i int 
set @i = 1 
while @i < @ 
begin  
   
set @i = @i + 1
   
set @Expression = substring (@Expression@p + 1,len(@Expression- @p ) 
   
set @p = CharIndex(@Delimiter,@Expression)
   
if @p > 0
   
begin
      
set @p = @p + len(@Delimiter- 1
   
end
   
else
   
begin
      
break
   
end
end 

declare @s varchar(1000
if @p = 0 and @i = @
begin 
   
set @s = @Expression
end 
else if @i = @ 
begin 
   
set @s = substring(@Expression1,@p - len(@Delimiter)) 
end 
return @s
end 

GO

declare @ varchar(1000
set @ = '@@playyuer@www&&.Microshaoft&&com@90.90@@pppp@.' 
declare @d varchar(1000
set @d = '@@'
select 
 dbo.UDF_SplitSubString (@ , 
@d0
,dbo.UDF_SplitSubString (@ , 
@d1
,dbo.UDF_SplitSubString (@ , 
@d2
,dbo.UDF_SplitSubString (@ , 
@d3
,dbo.UDF_SplitSubString (@ , 
@d4
,dbo.UDF_SplitSubString (@ , 
@d5
,dbo.UDF_SplitSubString (@ , 
@d6
,dbo.UDF_SplitSubString (@ , 
@d7
,dbo.UDF_SplitSubString (@ , 
@d8
,dbo.UDF_SplitSubString (@ , 
@d100

使用 T-SQL: PARSENAME 函数,参阅了:
T-SQL 拆分 IP 地址
http://www.cnblogs.com/montaque/archive/2004/11/24/67909.html
鸣谢原作者 montaque : !@#$%^&*

alter function dbo.UDF_SplitSubString
(
 
@Expression varchar(8000)
,
@Delimiter char(1)
,@ 
int
,
@Dot char(1= '$'
)
returns varchar(200)
as
begin
declare @p int
set @p = CharIndex(@Delimiter,@Expression)
declare @i int
set @i = 1
while @i < @
begin 
   
set @Expression = substring (@Expression@p + 1,len(@Expression- @p )
   
set @p = CharIndex (@Delimiter,@Expression)
   
set @i = @i + 1
end
declare @s varchar(1000)
if @p = 0 
begin
   
set @s =  @Expression
end
else 
begin
   
--替换一下 '.' 因为 parsename 只认 '.'
   set @Expression = replace(@Expression,'.',@Dot)
   
set @Expression = substring(@Expression,1,@p - 1+ '.' + substring(@Expression@p + 1,len(@Expression- @p)
   
set @s = ParseName(@Expression,2)
   
set @s = replace(@s,@Dot,'.')
end
return @s
end
go
--测试
declare @ varchar(1000)
set @ = '@playyuer@www.Microshaoft.com@90.90@@pppp@aa'
select
 dbo.UDF_SplitSubString (@ , 
'@'0,default)
,dbo.UDF_SplitSubString (@ , 
'@'1,default)
,dbo.UDF_SplitSubString (@ , 
'@'2,default)
,dbo.UDF_SplitSubString (@ , 
'@'3,default)
,dbo.UDF_SplitSubString (@ , 
'@'4,default)
,dbo.UDF_SplitSubString (@ , 
'@'5,default)
,dbo.UDF_SplitSubString (@ , 
'@'6,default)
,dbo.UDF_SplitSubString (@ , 
'@'7,default)
,dbo.UDF_SplitSubString (@ , 
'@'8,default)
,dbo.UDF_SplitSubString (@ , 
'@'100,default)

顺便说一句:
Ms SQL 2K SP4 is avaialable!
http://www.microsoft.com/downloads/details.aspx?FamilyId=8E2DFC8D-C20E-4446-99A9-B7F0213F8BC5&displaylang=zh-cn
http://download.microsoft.com/download/9/b/f/9bff6646-2cdb-4069-ada0-548be9cb9338/ReadmeSql2k32sp4.htm#_additional_information_about_sp4

posted @ 2005-05-10 12:46  于斯人也  阅读(5442)  评论(5编辑  收藏  举报