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

博客介绍了修订为不使用PARSENAME的内容,支持任意长度分隔符,提及使用T-SQL的PARSENAME函数拆分IP地址并给出参考链接,还提供了Ms SQL 2K SP4的下载链接及相关说明。

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

None.gif ALTER   function  dbo.UDF_SplitSubString 
None.gif
None.gif 
@Expression   varchar ( 8000
None.gif,
@Delimiter   varchar ( 100
None.gif,@ 
int  
None.gif
None.gif
returns   varchar ( 8000
None.gif
as  
None.gif
begin  
None.gif
-- declare @Expression varchar(8000) 
None.gif--
set @Expression = 'abc@@pppp@aa' 
None.gif--
declare @Delimiter varchar(100) 
None.gif--
set @Delimiter = '@@@'
None.gif--
declare @ int 
None.gif--
set @ = 3
None.gif

None.gif
declare   @p   int  
None.gif
set   @p   =   CharIndex ( @Delimiter , @Expression
None.gif
if   @p   >   0
None.gif
begin
None.gif   
set   @p   =   @p   +   len ( @Delimiter -   1
None.gif
end
None.gif
declare   @i   int  
None.gif
set   @i   =   1  
None.gif
while   @i   <  @ 
None.gif
begin   
None.gif   
set   @i   =   @i   +   1
None.gif   
set   @Expression   =   substring  ( @Expression @p   +   1 , len ( @Expression -   @p  ) 
None.gif   
set   @p   =   CharIndex ( @Delimiter , @Expression )
None.gif   
if   @p   >   0
None.gif   
begin
None.gif      
set   @p   =   @p   +   len ( @Delimiter -   1
None.gif   
end
None.gif   
else
None.gif   
begin
None.gif      
break
None.gif   
end
None.gif
end  
None.gif
None.gif
declare   @s   varchar ( 1000
None.gif
if   @p   =   0   and   @i   =  @
None.gif
begin  
None.gif   
set   @s   =   @Expression
None.gif
end  
None.gif
else   if   @i   =  @ 
None.gif
begin  
None.gif   
set   @s   =   substring ( @Expression 1 , @p   -   len ( @Delimiter )) 
None.gif
end  
None.gif
return   @s
None.gif
end  
None.gif
None.gif
GO
None.gif
None.gif
declare  @  varchar ( 1000
None.gif
set  @  =   ' @@playyuer@www&&.Microshaoft&&com@90.90@@pppp@. '  
None.gif
declare   @d   varchar ( 1000
None.gif
set   @d   =   ' @@ '
None.gif
select  
None.gif dbo.UDF_SplitSubString (@ , 
@d 0
None.gif,dbo.UDF_SplitSubString (@ , 
@d 1
None.gif,dbo.UDF_SplitSubString (@ , 
@d 2
None.gif,dbo.UDF_SplitSubString (@ , 
@d 3
None.gif,dbo.UDF_SplitSubString (@ , 
@d 4
None.gif,dbo.UDF_SplitSubString (@ , 
@d 5
None.gif,dbo.UDF_SplitSubString (@ , 
@d 6
None.gif,dbo.UDF_SplitSubString (@ , 
@d 7
None.gif,dbo.UDF_SplitSubString (@ , 
@d 8
None.gif,dbo.UDF_SplitSubString (@ , 
@d 100

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

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

顺便说一句:
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

转载于:https://www.cnblogs.com/Microshaoft/archive/2005/05/10/152325.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值