SQL Server中利用正则表达式替换字符串

来源:互联网 发布:简单的c语言程序例子 编辑:程序博客网 时间:2024/05/20 22:04

建立正则替换函数,利用了OLE对象,以下是函数代码:

--如果存在则删除原有函数IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL     DROP FUNCTION dbo.RegexReplaceGO--开始创建正则替换函数 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', @patternEXEC sp_OASetProperty @objRegex, 'IgnoreCase', @IgnoreCaseEXEC sp_OASetProperty @objRegex, 'Global', 1--执行EXEC sp_OAMethod @objRegex, 'Replace', @retstr OUT, @string, @replacestr--释放EXECUTE sp_OADestroy @objRegexRETURN @retstrENDGO--保证正常运行的话,需要将Ole Automation Procedures选项置为1  EXEC sp_configure 'show advanced options', 1  RECONFIGURE WITH OVERRIDE EXEC sp_configure 'Ole Automation Procedures', 1  RECONFIGURE WITH OVERRIDE 
复制以上代码,到SQL中执行

然后测试,如下

--2.将姓名倒过来  SELECT dbo.RegexReplace('John Smith', '([a-z]+)\s([a-z]+)', '$2,$1',1)  /* -------------------------------------- Smith,John */