比较字符串是否相等

表的一个字段varchar类型,select * from a where f1=@var(传入参数)
f1比如为"AA,BGF,YH",@var为"BGF,YH,AA".也就是说相同的值,只是排列顺序不同.
怎么写个简单函数来判断相等?当然可以SUBSTRING()一个一个取来判断,显得比较麻烦.

--创建用户定义函数
create function f_StrCmp(
@strA    varchar(1000),   --源字符串
@strB    varchar(1000),   --目的字符串
@separator varchar(10))   --分隔符
returns int  --1:匹配一致;else:匹配不一致
as
begin
    while charindex(@separator,@strB)>0
    begin
        if charindex(@separator+left(@strB,charindex(@separator,@strB)-1)+@separator,@separator+@strA+@separator)=0
            return 0
        set @strB=stuff(@strB,1,charindex(@separator,@strB)+len(@separator)-1,'')
    end
    return 1
end
go

--调用示例:
select dbo.f_StrCmp('AAAA,BBBB,CCCC','CCCC,BBBB,AAAA',',')
select dbo.f_StrCmp('AAAA,BBB,CCCC','CCCC,BBBB,AAAA',',')
go

--楼主的SQL可修改为:select * from a where dbo.f_StrCmp(f1,@var,',')=1

--删除用户定义函数
drop function f_StrCmp

------------------------------------------------------通用的比较函数

create function F_StrCompare(@str1 varchar(8000),@str2 varchar(8000))
returns int
as
begin
    declare @cnt int,@num int
    select @cnt=0,@num=(case when len(@str1)>len(@str2) then len(@str1) else len(@str2) end)
   
    while @num>0
    begin
        if substring(@str1,@num,1)=substring(@str2,@num,1)
            set @cnt=@cnt+1
        set @num=@num-1
    end
    return @cnt
end
go

declare @t table(id int,[desc] varchar(1000))
insert into @t select 1,'我的家在这里?'
insert into @t select 1,'我的家在浙江?'

---------------------选出与'我的家在哪里?'最接近的结果

select top 1 * from @t order by dbo.F_StrCompare('我的家在哪里?',[desc]) desc

/*
id          desc
----------- -----------------------
1           我的家在这里?
*/

drop function F_StrCompare

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值