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'
'相同'
else
'不同'
--執行結果 /*
相同 */
--第二版 /*
* 功能:不按先後順序比較字串序列是否相同*
* 適用: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...