一、創(chuàng)建 .NET類庫
1. 新建.NET項(xiàng)目
- 在選擇.NET的版本時(shí)为鳄,注意選擇根據(jù)系統(tǒng)中.NET Framework的版本進(jìn)行尋找
- 名稱可以選擇填寫MSSQLRegexExtend,也可以選擇自己命名,但要注意之后的程序中五鲫,名稱要保持一致河绽。
2. 清除新建程序的代碼
3.把下面的代碼復(fù)制到程序中
using System.Text.RegularExpressions;
namespace MSSQLRegexExtend
{
public class RegexExtend
{
/// <summary>
/// 正則匹配
/// </summary>
/// <param name="regex">正則表達(dá)式</param>
/// <param name="input">文本</param>
/// <returns></returns>
[Microsoft.SqlServer.Server.SqlFunction]
public static string Match(string regex, string input)
{
return string.IsNullOrEmpty(input) ? "" : new Regex(regex, RegexOptions.IgnoreCase).Match(input).Value;
}
/// <summary>
/// 正則替換
/// </summary>
/// <param name="regex">正則表達(dá)式</param>
/// <param name="input">文本</param>
/// <param name="replace">要替換的目標(biāo)</param>
/// <returns></returns>
[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);
}
/// <summary>
/// 正則校驗(yàn)
/// </summary>
/// <param name="regex">正則表達(dá)式</param>
/// <param name="input">文本</param>
/// <returns></returns>
[Microsoft.SqlServer.Server.SqlFunction]
public static bool IsMatch(string regex, string input)
{
return !string.IsNullOrEmpty(input) && new Regex(regex, RegexOptions.IgnoreCase).IsMatch(input);
}
}
}
4.點(diǎn)擊生成MSSQLRegexExtend
5.找到文件所在路徑
二、運(yùn)行SQL程序
1. 注冊.net類庫
注意:運(yùn)行SQL命令前首先要切換到所需數(shù)據(jù)庫塞淹,下面以微軟樣例數(shù)據(jù)庫Northwind為例。
代碼如下:
/****注冊.net類庫****/
use Northwind
--1.注冊.net類庫
CREATE ASSEMBLY Regex from 'F:\工具\(yùn)MSSQLRegexExtend.dll' WITH PERMISSION_SET = SAFE
--2.將數(shù)據(jù)庫設(shè)置為可以使用clr組件
sp_configure 'clr enabled', 1
--3.設(shè)置可用clr組件罪裹。別忘記運(yùn)行這行進(jìn)行應(yīng)用
RECONFIGURE
--4.刪除該類庫(刪除時(shí)執(zhí)行)
--DROP ASSEMBLY Regex
注冊.net 類庫 文件路徑為儲存MSSQLRegexExtend.dll 文件的路徑
將數(shù)據(jù)庫設(shè)置為可以使用clr組件
2.將類庫中的靜態(tài)方法注冊為函數(shù)
/****以下代碼將類庫中的靜態(tài)方法注冊為函數(shù)****/
--1.正則匹配
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]
--DROP FUNCTION [dbo].[Regex.Match]
--2.正則替換
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]
--DROP FUNCTION [dbo].[Regex.Replace]
--3.正則校驗(yàn)
CREATE FUNCTION [dbo].[Regex.IsMatch](@Regex [nvarchar](max),@Input [nvarchar](max))
RETURNS [bit] WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [Regex].[MSSQLRegexExtend.RegexExtend].[IsMatch]
--DROP FUNCTION [dbo].[Regex.IsMatch]
設(shè)置正則匹配
設(shè)置正則替換
設(shè)置正則校驗(yàn)
三组贺、測試結(jié)果
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 --正則校驗(yàn)有門牌號碼的記錄
- 正則匹配是保留正則表達(dá)式匹配到的值
[dbo].[Regex.Match]('正則表達(dá)式',[字段名])
第一個(gè)值填: 正則表達(dá)式
第二個(gè)值填: 字段名
例: [dbo].[Regex.Match]('(\d)+',[Address]) as [門牌號碼]
- 正則替換是將正則表達(dá)式匹配到的值替換為所需值
[dbo].[Regex.Replace]('正則表達(dá)式',[字段名],'替換值')
第一個(gè)值填: 正則表達(dá)式
第二個(gè)值填: 字段名
第三個(gè)值填: 替換值
例: [dbo].[Regex.Replace]('\d',[Address],'*') as [將門牌號碼打碼]
- 正則校驗(yàn)是比較匹配值是否滿足正則表達(dá)式
[dbo].[Regex.IsMatch]('正則表達(dá)式',[字段名])=1
第一個(gè)值填: 正則表達(dá)式
第二個(gè)值填: 字段名
例: [dbo].[Regex.IsMatch]('\d',[Address])=1