不按先后顺序比较字符串序列是否相同(动态SQL)

/*
 * 功能:不按先后顺序比较字符串序列是否相同            *
 * 适用:SQL Server 2000 / SQL Server 2005           *
 * 返回:1相同0不相同                                 *
 * 作者:Flystone                                    *
 * 描述:学习Limpire(昨夜小楼)的方法后做一个动态SQL的  *
*/


CREATE   proc  sp_CompareString
 
@Str1   varchar ( 100 ),
 
@Str2   varchar ( 100 ),
 
@Split   varchar ( 10 ),
 
@ret   int  output
AS
BEGIN

declare   @Len   int @Sub   varchar ( 100 )

if   @Str1   =   @Str2   return ( 1 )
if   len ( @Str1 <>   len ( @Str2 or   len ( replace ( @Str1 @Split '' ))  <>   len ( replace ( @Str2 @Split '' )) 
begin
    
set   @ret   =   0
    
return
end  

set   @str1   =   ' select  ''' + replace ( @str1 , @Split , '''  as col union all select  ''' ) + ''''
set   @str2   =   ' select  ''' + replace ( @str2 , @Split , '''  as col union all select  ''' ) + ''''

declare   @s   nvarchar ( 4000 )
set   @s   =   '
if exists(select 1 from (
' + @str1 + ' ) a where not exists(select 1 from ( ' + @str2 + ' ) b where a.col  = b.col)
or
exists(select 1 from (
' + @str2 + ' ) a where not exists(select 1 from ( ' + @str1 + ' ) b where a.col  = b.col)
))
   select @ret = 0
else 
   select @ret = 1
'

exec  sp_executesql  @s ,N ' @ret int output ' , @ret  output


END
GO
declare   @ret   int
exec  sp_CompareString  ' a,b,c ' ' b,c,a ' ' , ' , @ret  out

select   @ret
exec  sp_CompareString  ' a,b,c ' ' b,c,c,a ' ' , ' , @ret  out

select   @ret

drop   proc  sp_CompareString

/*


----------- 
1

(所影响的行数为 1 行)

            
----------- 
0

(所影响的行数为 1 行)
*/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值