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

本文介绍了一个SQL Server过程,用于比较两个由特定分隔符分隔的字符串序列是否包含相同的元素,不论顺序如何。此过程适用于SQL Server 2000及更高版本,并通过动态SQL实现比较逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 * 功能:不按先后顺序比较字符串序列是否相同            *
 * 适用: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(@Str2or 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、付费专栏及课程。

余额充值