Oracle數據庫默認就提供了正則表達式(詳見
維基百科)支持,如:REGEXP_LIKE(),REGEXP_INSTR(),REGEXP_SUBSTR(),REGEXP_REPLACE()),而不思進的MS SQL Server卻沒有直接提供。不過MS留了一手,那就是CLR(是公共語言運行時,Common Language Runtime)。SQL SERVER 2005及以上的版本均可以運用此方法。MS是爲了推.NET而這樣乾的嗎?
言歸正傳,我這裏徹底參照Oracle實現了MS SQL Server對正則表達式的支持。主要運用CLR自行編寫了如下5個標量函數:REGEXP_LIKE(),REGEXP_INSTR(),REGEXP_INSTR2(),REGEXP_SUBSTR(),REGEXP_REPLACE()。正則表達式
功能說明:數據庫
1.
Regexp_Like(soure,pattern)
檢查源字符串中是否存在匹配正則表達式的字符串,存在返回1,不存在返回0
source:源字符串
pattern:正則表達式
2.
Regexp_InStr(soure,pattern,position,num)
匹配源字符串與正則表達式,返回匹配的起始位置值。
source:源字符串
pattern:正則表達式
possition:字符串開始位置
num:返回第n個匹配
3.
Regexp_InStr2(soure,pattern)
匹配源字符串與正則表達式,返回第1個匹配的起始位置值。
(其實是
Regexp_InStr()的重載。因MS SQL不支持重載,因此另外命名)
source:源字符串
pattern:正則表達式
4.
Regexp_SubStr(soure,pattern)
匹配源字符串與正則表達式,返回匹配的子字符串。
source:源字符串
pattern:正則表達式
5.
Regexp_Replace(soure,pattern,replace_string)
匹配源字符串與正則表達式,返回值等於將匹配部分替換爲指定字符串的新字符串。
source:源字符串
pattern:正則表達式
replace_string:用於替換的字符串
部署:
1.需部署在數據庫服務器上;
2.環境要求:.Net Framework 3.5 (操做系統只測試過64位,32位未測試過);
3.下載程序,放到C:\WINDOWS目錄(固然,也能夠是其它目錄,但須要本身改部署腳本);程序下載連接
4.下載部署腳本;部署腳本下載連接
5.運行SQL Server Management Studio,登陸並指定要使用正則表達式的庫,打開並執行部署腳本便可。
驗證:
說明:
1. 此處使用Oracle原生函數執行結果和自行編寫的CLR執行結果進行對比;
2. 正則表達式'(\w)\1'的做用:匹配字符串中重複出現的任何單詞字符;
(放在當前的語境中,就是找出用戶表姓名字段中包含疊字的信息
)服務器
Oracle:
![1.png](http://static.javashuo.com/static/loading.gif)
Sql Server:函數
![2.png](http://static.javashuo.com/static/loading.gif)
結果一致。