當前位置:首頁 » 編程語言 » sql用正則性能
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql用正則性能

發布時間: 2023-01-20 15:32:00

❶ 在ms sql中如何使用正則表達式,請給出簡單示例,注釋越詳細越好!感激不盡

MSSQL不支持正則表達式,可以用CLR實現。

1、新建一個MSSQL的資料庫項目,配置到你的資料庫中

2、在資料庫項目中新建一個函數庫,編寫如下代碼:

///<summary>

///驗證是否符合正則表達式

///</summary>

[SqlFunction]

(stringinput,stringregex)

{

returnnewSqlBoolean(Regex.IsMatch(input,regex,RegexOptions.IgnoreCase));

}

然後在資料庫項目上點擊「右鍵」,選擇「部署」

PS:此功能需要MSSQL2005或者以上版本支持

如果你使用的是.NET3.5版本的話,需要在資料庫伺服器上安裝.netframework3.5

目前SQLSERVERCLR不支持.NET4.0,所以如果你使用VS2010開發的話需要把項目版本修改成為.NET2.0/3.5

使用方法:

SELECT*FROM[table]WHEREdbo.RegexIsMatch([ID],'^d+$')=1

❷ 如何在SQL Server中使用正則表達式

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 @Err<>0 GoTo LB

EXEC @Err=Sp_OASetProperty @obj,'Pattern',@Reg
If @Err<>0 GoTo LB

EXEC @Err=Sp_OASetProperty @obj,'Global','True'
If @Err<>0 GoTo LB

EXEC @Err=Sp_OASetProperty @obj,'IgnoreCase','False'
If @Err<>0 GoTo LB

EXEC @Err=Sp_OAMethod @obj,'Test',@Rst OUTPUT,@source
If @Err<>0 GoTo LB

EXEC @Err=Sp_OADestroy @obj
If @Err<>0 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 @Err<>0 GoTo LB

EXEC @Err=Sp_OASetProperty @obj,'Pattern',@Reg
If @Err<>0 GoTo LB

EXEC @Err=Sp_OASetProperty @obj,'Global','True'
If @Err<>0 GoTo LB

EXEC @Err=Sp_OASetProperty @obj,'IgnoreCase','False'
If @Err<>0 GoTo LB

EXEC @Err=Sp_OAMethod @obj,'Replace',@Rst OUTPUT,@source,@Str
If @Err<>0 GoTo LB

EXEC @Err=Sp_OADestroy @obj
If @Err<>0 GoTo LB

Return @Rst
LB:
EXEC Sp_OADestroy @obj
RETURN Null
End
--字元串替換的
select dbo.MyReplace('\d','123A454','')

--字元串提取的,這種方法不會搞
--這兩個函數需要開啟Ole Automation Proceres配置
/*
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ole Automation Proceres',1
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
*/
--CLR的匹配,查找,截取,統計,分割和提取代碼我也有,不知道你要不要

❸ 如何在sql語句中使用正則表達式

sqlserver中,主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四個正則表達式函數。

1、regexp_like:

regexp_like(x,pattern[,match_option]),查看x是否與pattern相匹配,該函數還可以提供一個可選的參數match_option字元串說明默認的匹配選項。match_option的取值如下:

'c' 說明在進行匹配時區分大小寫(預設值);

'i' 說明在進行匹配時不區分大小寫;

'n' (.)點號能表示所有單個字元,包括換行(俺還不知道什麼地方有用到換行.只知道sql裡面可以用chr(10)表示換行、

'm' 字元串存在換行的時候當作多行處理.這樣$就可匹配每行的結尾.不然的話$只匹配字元串最後的位置、

示例:

select * from emp where regexp_like(ename,'^a[a-z]*n$');

可以查找ename中以a開頭以n結尾的行.例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為默認是區分大小寫.如果是

select * from emp where regexp_like(ename,'^a[a-z]*n$','i')

則可以查找ename為Arwen的行記錄。

2、regexp_instr:

REGEXP_INSTR(x,pattern[,start[,occurrence[,return_option[, match_option]]]])用於在x中查找pattern。返回pattern在x中出現的位置。匹配位置從1開始。可以參考字元串函數 INSTR(),參數相關:

'start' 開始查找的位置;

'occurrence' 說明應該返回第幾次出現pattern的位置;

'return_option' 說明應該返回什麼整數。若該參數為0,則說明要返回的整數是x中的一個字元的位置;若該參數為非0的整數,則說明要返回的整數為x中出現在pattern之後 的字元的位置;

'match_option' 修改默認的匹配設置.與regexp_like裡面的相同.

示例:

DECLARE

V_RESULT INTEGER ;

BEGIN

SELECT REGEXP_INSTR('hello world','o',1,1,0) INTO V_RESULT

FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END;

結果為5,即字母o第一個次出現的位置。

如果regexp_instr('hello world','o',1,1,n)其中n為除0之外的整數。比如1,3。則結果為6.表示第一次出現字母o的後面一個字元的位置。

如果regexp_instr('hello world','o',1,2,0)則結果為9.表示第二次出現字母o的位置.

3、regexp_replace:

REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])用於在x中查找pattern,並將其替換為replae_string。可以參考字元串函數 REPLACE(),參數同REGEXP_INSTR函數

示例:

DECLARE

V_RESULT varchar2(90);

BEGIN

SELECT REGEXP_REPLACE('hello world','o','x',1,1) INTO V_RESULT

FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END;

結果為hellx world.

如果REGEXP_REPLACE('hello world','o','x'),則結果為hellx wxrld.

如果 REGEXP_REPLACE('hello world','o','x',1,2)則結果為hello wxrld.

4、regexp_substr:

REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])用於在x中查找pattern並返回。可以參考字元串函數 SUBSTR(),參數同REGEXP_INSTR函數.

例如:

DECLARE

V_RESULT VARCHAR2(255);

BEGIN

SELECT REGEXP_SUBSTR('hello world','l{2}') INTO V_RESULT

FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END ;

結果為ll

查詢到匹配的字元串才返回匹配的字元.沒查到就返回空。

❹ 怎麼樣用正則表達式來解析sql語句

sqlserver中,主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四個正則表達式函數。

❺ 如何用java 寫一個正則表達式判讀一個日誌字元串是否包含 sql語句,包含就返回true ,跪求

用正則判斷的可能問題是性能差
由於你的日誌必然是用某種固定格式輸出的sql,所以我覺得還不如匹配與sql無關的關鍵字元串

❻ sql 2000 正則多關鍵字搜索

asdas dsjf sdnf jsnd,fnwi,nzsdsiosjagt,m nafasdf sdfdsgf rt azdxfnmkjann ,mzn m,asnri wj4e ,mansf na,fn dsanniAE,MQ

❼ mysql sql語句正則表達式

select * from a where b regexp '王'

❽ 如何在sql server中使用正則表達式

大致步驟是:
1.下載他提供的那個壓縮包,裡面有源代碼和安裝腳本
2.將DLL復制到SQL Server規定的目錄
3.運行INSTALL.sql這個腳本
大致使用的效果如下
SELECT master.dbo.fn_pcre_match('[email protected]','^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$')
這句腳本的意思是,根據後面的正則表達式(一個email的規則)匹配前面的字元串.
如果返回1的話,表示匹配到了,否則返回0.

❾ sql正則表達式替換姓名數字

sql正則表達式替換姓名數字其實使用正則表達式經營替換,可以採用正則表達式來進行編輯,可以在文檔上的函數表達式上進行