SQL Serverで正規表現を使用して文字列を置換

1697 ワード

OLEオブジェクトを使用した正規置換関数を作成します.以下は関数コードです.
IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL 
    DROP FUNCTION dbo.RegexReplace
GO
CREATE FUNCTION dbo.RegexReplace
(
	@string VARCHAR(MAX),	--       
	@pattern VARCHAR(255),	--    
	@replacestr VARCHAR(255),	--       
	@IgnoreCase INT = 0	--0      1      
)
RETURNS VARCHAR(8000)
AS 
BEGIN
    DECLARE @objRegex INT, @retstr VARCHAR(8000)
	--    
	EXEC sp_OACreate 'VBScript.RegExp', @objRegex OUT
	--    
	EXEC sp_OASetProperty @objRegex, 'Pattern', @pattern
	EXEC sp_OASetProperty @objRegex, 'IgnoreCase', @IgnoreCase
	EXEC sp_OASetProperty @objRegex, 'Global', 1
	--  
	EXEC sp_OAMethod @objRegex, 'Replace', @retstr OUT, @string, @replacestr
	--  
	EXECUTE sp_OADestroy @objRegex
	RETURN @retstr
END
GO

注意:この関数の正常な使用を保証するには、Ole Automation Proceduresオプションを1に設定する必要があります.具体的な文は
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'Ole Automation Procedures', 1
RECONFIGURE

これで、他のSQL関数と同様に、この関数を使用できます.
--1.URL SELECT dboを置き換える.RegexReplace('と思うhttp://www.csdn.netいいサイトです','(http/:///|^http/://///////)([/w-]+/.+//.+[/w-]+/.+[/w-]+/.+|[/w-]+/.+/////////+[[w-]+/[?]*)?',        '$1$2$3',0)/*-----------------------------------------------------------------私はhttp://www.csdn.netいいサイトです*/--2.名前を逆さにしてRegexReplace('John Smith', '([a-z]+)/s([a-z]+)', '$2,$1',1)/* -------------------------------------- Smith,John */