SQL Server中利用正則表達式替換字符串


建立正則替換函數,利用了OLE對象,以下是函數代碼:

 

[c-sharp] view plain copy print ?
  1. IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL  
  2.     DROP FUNCTION dbo.RegexReplace 
  3. GO 
  4. CREATE FUNCTION dbo.RegexReplace 
  5.     @string VARCHAR(MAX),   --被替換的字符串 
  6.     @pattern VARCHAR(255),  --替換模板 
  7.     @replacestr VARCHAR(255),   --替換后的字符串 
  8.     @IgnoreCase INT = 0 --0區分大小寫 1不區分大小寫 
  9. RETURNS VARCHAR(8000) 
  10. AS  
  11. BEGIN 
  12.     DECLARE @objRegex INT, @retstr VARCHAR(8000) 
  13.     --創建對象 
  14.     EXEC sp_OACreate 'VBScript.RegExp', @objRegex OUT 
  15.     --設置屬性 
  16.     EXEC sp_OASetProperty @objRegex, 'Pattern', @pattern 
  17.     EXEC sp_OASetProperty @objRegex, 'IgnoreCase', @IgnoreCase 
  18.     EXEC sp_OASetProperty @objRegex, 'Global', 1 
  19.     --執行 
  20.     EXEC sp_OAMethod @objRegex, 'Replace', @retstr OUT, @string, @replacestr 
  21.     --釋放 
  22.     EXECUTE sp_OADestroy @objRegex 
  23.     RETURN @retstr 
  24. END 
  25. GO 

 

注:為保證本函數的正常使用,還需要將Ole Automation Procedures選項置為1,具體語句為

 

[c-sharp] view plain copy print ?
  1. EXEC sp_configure 'show advanced options', 1 
  2. RECONFIGURE 
  3. EXEC sp_configure 'Ole Automation Procedures', 1 
  4. RECONFIGURE 

 

現在,我們就可以像使用其他SQL函數一樣,使用本函數了。

[c-sharp] view plain copy print ?
  1. --1.替換URL 
  2. SELECT  dbo.RegexReplace('我覺得http://www.csdn.net是個不錯的網站'
  3.         '(http/:////|^http/:////)([/w-]+/.+[/w-]+/.+[/w-]+/.+[/w-]+|[/w-]+/.+[/w-]+/.+[/w-]+)(/[/w-./?%&=]*)?'
  4.         '<a href="http://$2$3" mce_href="http://$2$3" target=_blank>$1$2$3</a>',0) 
  5. /*
  6. --------------------------------------
  7. 我覺得<a href="http://www.csdn.net" mce_href="http://www.csdn.net" target=_blank>http://www.csdn.net</a>是個不錯的網站
  8. */ 
  9. --2.將姓名倒過來 
  10. SELECT dbo.RegexReplace('John Smith', '([a-z]+)/s([a-z]+)', '$2,$1',1) 
  11. /*
  12. --------------------------------------
  13. Smith,John
  14. */ 

 

 

類似的例子,可以舉出很多,這就和SQL水平關系不大,只和對正則表達式的熟悉程度有關了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM