一、新建.net类库项目
- 创建类库项目,名为MSsqlRegexExtend
- 创建一个类,名为RegexExtend
- 复制下面代码到类中
using System.Text.RegularExpressions; namespace MSsqlRegexExtend { public class RegexExtend { /// <summary> /// 正则匹配 /// </summary> /// <param name="regex">正则表达式</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">正则表达式</param> /// <param name="input">文本</param> /// <param name="replace">要替换的目标</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> /// 正则校验 /// </summary> /// <param name="regex">正则表达式</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); } } }
- 右击项目生成
--DROP ASSEMBLY Regex CREATE ASSEMBLY Regex from 'E:\CSharp\MSsqlRegexExtend\MSsqlRegexExtend\bin\Release\MSsqlRegexExtend.dll' WITH PERMISSION_SET = SAFE --注册.net类库 sp_configure 'clr enabled',1 --将数据库设置为可以使用clr组件 RECONfigURE --设置可用clr组件。别忘记运行这行进行应用 /****以下代码将类库中的静态方法注册为函数****/ /****正则匹配****/ --DROP FUNCTION [dbo].[Regex.Match] 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.Replace] 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.IsMatch] CREATE FUNCTION [dbo].[Regex.IsMatch](@Regex [nvarchar](max),@Input [nvarchar](max)) RETURNS [bit] WITH EXECUTE AS CALLER AS EXTERNAL NAME [Regex].[MSsqlRegexExtend.RegexExtend].[IsMatch]
三、调用示例
SELECT [CustomerID],[CompanyName],[ContactName],[ContactTitle],[City],[Region],[PostalCode],[Country],[Phone],[Fax],[Address],[dbo].[Regex.Match]('(\d)+',[Address]) as [门牌号码] --正则匹配,[dbo].[Regex.Replace]('\d','*') as [将门牌号码打码] --正则替换 FROM [northwind].[dbo].[Customers] where [dbo].[Regex.IsMatch]('\d',[Address])=1 --正则校验有门牌号码的记录
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。