加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLserver中使用正则表达式

发布时间:2020-12-12 13:38:50 所属栏目:MsSql教程 来源:网络整理
导读:一、新建.net类库项目 创建类库项目,名为MSSQLRegexExtend 创建一个类,名为RegexExtend 复制下面代码到类中 using System.Text.RegularExpressions;namespace MSSQLRegexExtend{ public class RegexExtend { /// summary /// 正则匹配 /// /summary /// pa

一、新建.net类库项目

  1. 创建类库项目,名为MSSQLRegexExtend
  2. 创建一个类,名为RegexExtend
  3. 复制下面代码到类中
    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);
            }
        }
    }
    

  4. 右击项目生成

二、将类库注册到MSSQL中

在数据库中执行如下脚本(类库存放地址得自己修改正确)。

--DROP ASSEMBLY Regex
CREATE ASSEMBLY Regex from 'E:CSharpMSSQLRegexExtendMSSQLRegexExtendbinReleaseMSSQLRegexExtend.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				--正则校验有门牌号码的记录





??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读