1、新建.net类库项目正则表达式
- 建立类库项目,名为MSSQLRegexExtend
- 建立一个类,名为RegexExtend
- 复制下面代码到类中
- using System.Text.RegularExpressions;
-
- namespace MSSQLRegexExtend
- {
-
- public class RegexExtend
- {
-
-
-
-
-
-
- [Microsoft.SqlServer.Server.SqlFunction]
- public static string Match(string regex, string input)
- {
- return string.IsNullOrEmpty(input) ? "" : new Regex(regex, RegexOptions.IgnoreCase).Match(input).Value;
- }
-
-
-
-
-
-
-
-
- [Microsoft.SqlServer.Server.SqlFunction]
- public static string Replace(string regex, string input, string replace)
- {
- return string.IsNullOrEmpty(input) ? "" : new Regex(regex, RegexOptions.IgnoreCase).Replace(input, replace);
- }
-
-
-
-
-
-
-
- [Microsoft.SqlServer.Server.SqlFunction]
- public static bool IsMatch(string regex, string input)
- {
- return !string.IsNullOrEmpty(input) && new Regex(regex, RegexOptions.IgnoreCase).IsMatch(input);
- }
- }
- }
- 右击项目生成
2、将类库注册到MSSQL中sql
在数据库中执行以下脚本(类库存放地址得本身修改正确)。数据库
- CREATE ASSEMBLY Regex from 'E:\CSharp\MSSQLRegexExtend\MSSQLRegexExtend\bin\Release\MSSQLRegexExtend.dll' WITH PERMISSION_SET = SAFE
-
- sp_configure 'clr enabled', 1
- RECONFIGURE
-
- /****如下代码将类库中的静态方法注册为函数****/
-
- /****正则匹配****/
- CREATE FUNCTION [dbo].[Regex.Match](@Regex [nvarchar](max),@Input [nvarchar](max))
- RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
- AS
- EXTERNAL NAME [Regex].[MSSQLRegexExtend.RegexExtend].[Match]
-
- /****正则替换****/
- CREATE FUNCTION [dbo].[Regex.Replace](@Regex [nvarchar](max),@Input [nvarchar](max),@Replace [nvarchar](max))
- RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
- AS
- EXTERNAL NAME [Regex].[MSSQLRegexExtend.RegexExtend].[Replace]
-
- /****正则校验****/
- CREATE FUNCTION [dbo].[Regex.IsMatch](@Regex [nvarchar](max),@Input [nvarchar](max))
- RETURNS [bit] WITH EXECUTE AS CALLER
- AS
- EXTERNAL NAME [Regex].[MSSQLRegexExtend.RegexExtend].[IsMatch]
3、调用示例函数
- SELECT [CustomerID]
- ,[CompanyName]
- ,[ContactName]
- ,[ContactTitle]
- ,[City]
- ,[Region]
- ,[PostalCode]
- ,[Country]
- ,[Phone]
- ,[Fax]
- ,[Address]
- ,[dbo].[Regex.Match]('(\d)+',[Address]) as [门牌号码]
- ,[dbo].[Regex.Replace]('\d',[Address],'*') as [将门牌号码打码]
- FROM [Northwind].[dbo].[Customers]
- where [dbo].[Regex.IsMatch]('\d',[Address])=1
