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
