回覆列表
-
1 # 使用者1430807591406
-
2 # 使用者1465424935672
SQL中不能使用正則表示式,但是可以使用萬用字元來達到類似效果
1 % 包含零個或更多字元的任意字串
示例:WHERE title LIKE "%computer% " 將查詢處於書名任意位置的包含單詞 computer 的所有書名。
2 _(下劃線) 任何單個字元
示例:WHERE au_fname LIKE "_ean " 將查詢以 ean 結尾的所有 4 個字母的名字(Dean、Sean 等)。
3 [] 指定範圍中的任何單個字元
示例:WHERE au_lname LIKE "[C-P]arsen " 將查詢以arsen 結尾且以介於 C 與 P 之間的任何單個字元開始的 作者姓氏,例如,Carsen、Larsen、Karsen 等
4 [^] 不屬於指定範圍中的任何單個字元,與 [] 相反
示例:WHERE au_lname LIKE "de[^l]% " 將查詢以 de 開始且其後的字母不為 l 的所有作者的姓氏。
Create Function [dbo].[IsMatch](@Reg Varchar(1000),@Source Varchar(4000))
returns sql_variant
As
Begin
Declare @Err Int
Declare @obj Int
Declare @Rst sql_variant
EXEC @Err=Sp_OACreate "VBScript.RegExp",@obj OUTPUT
If @Err0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,"Pattern",@Reg
If @Err0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,"Global","True"
If @Err0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,"IgnoreCase","False"
If @Err0 GoTo LB
EXEC @Err=Sp_OAMethod @obj,"Test",@Rst OUTPUT,@source
If @Err0 GoTo LB
EXEC @Err=Sp_OADestroy @obj
If @Err0 GoTo LB
Return @Rst
LB:
EXEC Sp_OADestroy @obj
RETURN Null
End
--字串匹配的
Select dbo.IsMatch("\d","12345")
Create Function [dbo].[MyReplace](@Reg Varchar(1000),@Source Varchar(4000),@Str Varchar(1000))
returns sql_variant
As
Begin
Declare @Err Int
Declare @obj Int
Declare @Rst sql_variant
EXEC @Err=Sp_OACreate "VBScript.RegExp",@obj OUTPUT
If @Err0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,"Pattern",@Reg
If @Err0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,"Global","True"
If @Err0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,"IgnoreCase","False"
If @Err0 GoTo LB
EXEC @Err=Sp_OAMethod @obj,"Replace",@Rst OUTPUT,@source,@Str
If @Err0 GoTo LB
EXEC @Err=Sp_OADestroy @obj
If @Err0 GoTo LB
Return @Rst
LB:
EXEC Sp_OADestroy @obj
RETURN Null
End
--字串替換的
select dbo.MyReplace("\d","123A454","")
--字串提取的,這種方法不會搞
--這兩個函式需要開啟Ole Automation Procedures配置
/*
exec sp_configure "show advanced options",1
reconfigure
exec sp_configure "Ole Automation Procedures",1
reconfigure
exec sp_configure "show advanced options",0
reconfigure
*/