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

2021-08-25 18:38:54 字數 4292 閱讀 5183

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(@str)>0

begin

insert

into @tb select

left(@str,1),

ascii

(left(@str,1))

set @str=right(@str,

len(@str)-1)

enddeclare @sql varchar

(8000)

select @sql=

isnull

(@sql+'',

'')+s from @tb order

by a

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 int

outputas

begin

declare @len int

, @sub varchar

(100)

if @str1 = @str2 return

(1)if

len(@str1)

<>

len(@str2)

orlen

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

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)if

len(@str1)

<>

len(@str2)

orlen

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

> 0

begin

set @sub =

left(@str1,

charindex

(@split, @str1, @len + 1)

+ @len - 1)

ifcharindex

(@sub, @str2)

= 0 return

(0)while

charindex

(@sub, @str1)

> 0 set @str1 =

replace

(@str1, @sub,

',')

while

charindex

(@sub, @str2)

> 0 set @str2 =

replace

(@str2, @sub,

',')

iflen

(@str1)<>

len(@str2)

return

(0)end

return

(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*/

葉子函式分享四 綜合模糊查詢

建立函式 create function dbo m fuzzyquery v1 str nvarchar 2000 returns nvarchar 2000 as begin declare count int i int declare newchar nvarchar 200 nn nvar...

葉子函式分享四十四 全形半形轉換函式

此函式部分思路參考了 csdn 上大力的轉換函式 鄒建 2005.01 引用請保留此資訊 go 建立函式 create function sbc2dbc str nvarchar 4000 要轉換的字串 flag bit 轉換標誌 0轉換成半形 1轉換成全角 returns nvarchar 400...

葉子函式分享四十四 全形半形轉換函式

此函式部分思路參考了csdn上大力的轉換函式 鄒建2005.01 引用請保留此資訊 go 建立函式 create function sbc2dbc str nvarchar 4000 要轉換的字串 flag bit 轉換標誌,0轉換成半形,1轉換成全角 returns nvarchar 4000 a...