無序字元比較函式

2021-09-07 08:28:38 字數 4477 閱讀 6830

go

--建立函式(第一版)

create

function get_orderstr(@str

varchar(8000

))returns

varchar(8000)as

begin

set@str

=rtrim(@str

)

declare

@tbtable(s varchar(1),a int

)

while

len(@str)>

0begin

insert

into

@tbselect

left(@str,1),ascii(left(@str,1

))

set@str

=right(@str,len(@str)-1)

enddeclare

@sql

varchar(8000

)

select

@sql

=isnull(@sql

+'','')+s from

@tborderbya

return

isnull(@sql,''

)end

--測試示例

if(dbo.get_orderstr('

abc')=dbo.get_orderstr('

acb'

))print'相同

'else

print'不同

'--執行結果

/*相同

*/--

第二版/*

* 功能:不按先後順序比較字串序列是否相同 *

* 適用:sql server 2000 / sql server 2005 *

* 返回:相同不相同 *

* 描述:學習limpire(昨夜小樓)的方法後做乙個動態sql的*

*/go

--建立儲存過程(這個不是函式)

create

proc

sp_comparestring

@str1

varchar(100),

@str2

varchar(100),

@split

varchar(10),

@ret

intoutput

asbegin

declare

@len

int, @sub

varchar(100

)

if@str1

=@str2

return(1

)

iflen(@str1) <>

len(@str2) or

len(replace(@str1, @split, '')) <>

len(replace(@str2, @split, ''

))

begin

set@ret=0

return

endset

@str1='

select

'''+

replace(@str1,@split,'''

as col union all select

''')+

''''

set@str2='

select

'''+

replace(@str2,@split,'''

as col union all select

''')+

''''

declare

@snvarchar(4000

)

set@s='

if exists(select 1 from ('+

@str1+'

) a where not exists(select 1 from ('+

@str2+'

) b where a.col = b.col)

orexists(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

endgo

--測試示例

declare

@ret

intexec sp_comparestring '

a,b,c

', '

b,c,a

', '

,',@ret

outselect

@ret

exec sp_comparestring '

a,b,c

', '

b,c,c,a

', '

,',@ret

outselect

@ret

drop

proc

sp_comparestring go

--第三版

/** * * * * * * * * * * * * * * * * * * * * *

* 功能:不按先後順序比較字串序列是否相同*

* 適用:sql server 2000 / sql server 2005 *

* 返回:相同不相同 *

* * * * * * * * * * * * * * * * * * * * * *

*/--

建立函式

create

function

fn_comparestring

(

@str1

varchar(100

),

@str2

varchar(100

),

@split

varchar(10))

returns

bitas

begin

declare

@len

int, @sub

varchar(100

)

if@str1

=@str2

return(1

)

iflen(@str1) <>

len(@str2) or

len(replace(@str1, @split, '')) <>

len(replace(@str2, @split, '')) return(0

)

select

@len

=len(@split), @str1

=@split

+@str1

+@split, @str2

=@split

+@str2

+@split

while

charindex(@split, @str1, @len

+1) >

0begin

set@sub

=left(@str1, charindex(@split, @str1, @len

+1) +

@len-1

)

ifcharindex(@sub, @str2) =

0return(0

)

while

charindex(@sub, @str1) >

0set

@str1

=replace(@str1, @sub, ','

)

while

charindex(@sub, @str2) >

0set

@str2

=replace(@str2, @sub, ','

)

iflen(@str1)<>

len(@str2) return(0

)

endreturn(1

)end

go--

測試示例

select dbo.fn_comparestring('

a,b,c

', '

b,c,a

', ','

)select dbo.fn_comparestring('

a,b,c

', '

b,c,c,a

', ','

) --執行結果/*1

0*/

葉子函式分享五十 無序字元比較函式

go 建立函式 第一版 create function get orderstr str varchar 8000 returns varchar 8000 as begin set str rtrim str declare tb table s varchar 1 a int while len...

字串比較函式

stricmp wcsicmp mbsicmp stricmp l wcsicmp l mbsicmp l 執行不區分大小寫的字串比較 語法 int stricmp const char string1,const char string2 int wcsicmp const wchar t str...

php字串比較函式

比較兩個字串是否相等,最常見的方法就是使用 來判斷,至於它和 的區別,簡單來說就是前者強調 identical 型別也要求一樣 後者要求 equal 值相同就可以了,參考。或者使用strcmp來判斷,但是這個能夠告訴你兩個字串是否相等,但是無法告訴你在那裡不同。我的思路是單字串分割為乙個個字母 ch...