Regex在MS SQL Server中的應用 Oracle資料庫預設就提供了Regex詳見維基百科)支援,如: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對Regex的支援。主要運用CLR自行編寫了以下5個純量涵式:REGEXP_LIKE(),REGEXP_INSTR(),REGEXP_INSTR2(),REGEXP_SUBSTR(),REGEXP_REPLACE()。
功能說明:
1.Regexp_Like(soure,pattern)
檢查源字串中是否存在匹配Regex的字串,存在返回1,不存在返回0
source:源字串
pattern:Regex
2.Regexp_InStr(soure,pattern,position,num)
匹配源字串與Regex,返回匹配的起始位置值。
source:源字串
pattern:Regex
possition:字串開始位置
num:返回第n個匹配
3.Regexp_InStr2(soure,pattern)
匹配源字串與Regex,返回第1個匹配的起始位置值。
(實際上是Regexp_InStr()的重載。因MS SQL不支援重載,所以另外命名)
source:源字串
pattern:Regex
4.Regexp_SubStr(soure,pattern)
匹配源字串與Regex,返回匹配的子字串。
source:源字串
pattern:Regex
5.Regexp_Replace(soure,pattern,replace_string)
匹配源字串與Regex,傳回值等於將匹配部分替換為指定字串的新字串。
source:源字串
pattern:Regex
replace_string:用於替換的字串
部署:
1.需部署在資料庫伺服器上;
2.環境要求:.Net Framework 3.5 作業系統只測試過64位,32位未測試過);
3.下載程式,放到C:\WINDOWS目錄當然,也可以是其它目錄,但需要自己改部署指令碼);程式下載連結
4.下載部署指令碼;部署指令碼下載連結
5.運行SQL Server Management Studio,登入並指定要使用Regex的庫,開啟並執行部署指令碼即可。
驗證:
說明:
1. 此處使用Oracle原生函數執行結果和自行編寫的CLR執行結果進行對比;
2. Regex'(\w)\1'的作用:匹配字串中重複出現的任何單詞字元;
放在當前的語境中,就是找出使用者表姓名欄位中包含疊字的資訊650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/130032KC-0.gif" /> )
Oracle:
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/130032NY-1.png" style="float:none;" title="1.png" />
Sql Server:
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/13003220P-2.png" style="float:none;" title="2.png" />
結果一致。650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131229/130032H10-3.gif" />
本文出自 “涼風動水碧蓮香” 部落格,轉載請與作者聯絡!