在SQL Server中使用RegEx

我正在寻找如何使用RegEx根据RegEx设置/ params来replace/编码文本:

RegEx.IgnoreCase = True RegEx.Global = True RegEx.Pattern = "[^az\d\s.]+" 

我在RegEx上看到了一些例子,但是如何在SQL Server中以相同的方式应用它,却感到困惑。 任何build议将是有益的。 谢谢。

您不需要与托pipe代码进行交互,因为您可以使用LIKE :

 CREATE TABLE #Sample(Field varchar(50), Result varchar(50)) GO INSERT INTO #Sample (Field, Result) VALUES ('ABC123 ', 'Do not match') INSERT INTO #Sample (Field, Result) VALUES ('ABC123.', 'Do not match') INSERT INTO #Sample (Field, Result) VALUES ('ABC123&', 'Match') SELECT * FROM #Sample WHERE Field LIKE '%[^a-z0-9 .]%' GO DROP TABLE #Sample 

当你的expression以+结束时,你可以用'%[^a-z0-9 .][^a-z0-9 .]%'

编辑 :澄清:SQL Server不支持没有托pipe代码的正则expression式。 根据情况, LIKE运算符可以是一个选项,但缺less正则expression式提供的灵活性。

正如本文所说明的,您将不得不构build一个提供正则expression式function的CLR过程。

Julio的答案略有修改。

 -- MS SQL using VBScript Regex -- select dbo.RegexReplace('aa bb cc','($1) ($2) ($3)','([^\s]*)\s*([^\s]*)\s*([^\s]*)') -- $$ dollar sign, $1 - $9 back references, $& whole match CREATE FUNCTION [dbo].[RegexReplace] ( -- these match exactly the parameters of RegExp @searchstring varchar(4000), @replacestring varchar(4000), @pattern varchar(4000) ) RETURNS varchar(4000) AS BEGIN declare @objRegexExp int, @objErrorObj int, @strErrorMessage varchar(255), @res int, @result varchar(4000) if( @searchstring is null or len(ltrim(rtrim(@searchstring))) = 0) return null set @result='' exec @res=sp_OACreate 'VBScript.RegExp', @objRegexExp out if( @res <> 0) return '..VBScript did not initialize' exec @res=sp_OASetProperty @objRegexExp, 'Pattern', @pattern if( @res <> 0) return '..Pattern property set failed' exec @res=sp_OASetProperty @objRegexExp, 'IgnoreCase', 0 if( @res <> 0) return '..IgnoreCase option failed' exec @res=sp_OAMethod @objRegexExp, 'Replace', @result OUT, @searchstring, @replacestring if( @res <> 0) return '..Bad search string' exec @res=sp_OADestroy @objRegexExp return @result END 

您需要在SQL中打开Ole Automation Procedures:

 exec sp_configure 'show advanced options',1; go reconfigure; go sp_configure 'Ole Automation Procedures', 1; go reconfigure; go sp_configure 'show advanced options',0; go reconfigure; go 

您可以在SqlServer中使用一个函数,并将其传递给您想要评估的值。 看看这个链接:http://msdn.microsoft.com/en-us/library/w2kae45k(v=vs.80).aspx

 SELECT * from SOME_TABLE where NAME like '%[^AZ]%' 

或者一些其他的expression,而不是AZ