比較字串是否相等

來源:互聯網
上載者:User

表的一個欄位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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.