Sqlserver使用正则表达式

一、创建 .NET类库

1. 新建.NET项目

image.png
  • 在选择.NET的版本时,注意选择根据系统中.NET Framework的版本进行寻找
  • 名称可以选择填写MSSQLRegexExtend,也可以选择自己命名,但要注意之后的程序中,名称要保持一致。
image.png

2. 清除新建程序的代码

image.png

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);
        }
    }
}

image.png

4.点击生成MSSQLRegexExtend

image.png

5.找到文件所在路径

image.png
image.png
image.png

二、运行SQL程序

1. 注册.net类库

注意:运行SQL命令前首先要切换到所需数据库,下面以微软样例数据库Northwind为例。

代码如下:

/****注册.net类库****/
use Northwind
--1.注册.net类库
CREATE ASSEMBLY Regex from 'F:\工具\MSSQLRegexExtend.dll' WITH PERMISSION_SET = SAFE 

--2.将数据库设置为可以使用clr组件
sp_configure 'clr enabled', 1   

--3.设置可用clr组件。别忘记运行这行进行应用
RECONFIGURE 
        
--4.删除该类库(删除时执行)
--DROP ASSEMBLY Regex
注册.net 类库 文件路径为储存MSSQLRegexExtend.dll 文件的路径
image.png
将数据库设置为可以使用clr组件
image.png
image.png

2.将类库中的静态方法注册为函数

/****以下代码将类库中的静态方法注册为函数****/
--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.正则校验
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]
设置正则匹配
image.png
设置正则替换
image.png
设置正则校验
image.png

三、测试结果

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             --正则校验有门牌号码的记录

  • 正则匹配是保留正则表达式匹配到的值
[dbo].[Regex.Match]('正则表达式',[字段名])
第一个值填: 正则表达式
第二个值填: 字段名
例: [dbo].[Regex.Match]('(\d)+',[Address]) as [门牌号码]
  • 正则替换是将正则表达式匹配到的值替换为所需值
[dbo].[Regex.Replace]('正则表达式',[字段名],'替换值') 
第一个值填: 正则表达式
第二个值填: 字段名
第三个值填: 替换值
例: [dbo].[Regex.Replace]('\d',[Address],'*') as [将门牌号码打码]   
  • 正则校验是比较匹配值是否满足正则表达式
[dbo].[Regex.IsMatch]('正则表达式',[字段名])=1
第一个值填: 正则表达式
第二个值填: 字段名
例: [dbo].[Regex.IsMatch]('\d',[Address])=1
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,788评论 0 9
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,193评论 4 61
  • 定位 一个强大贴心的买房卖房助手; 用户 想买房、想卖房的年轻人; 问题 对客户,有哪些房子在售?卖多少钱?找谁买...
    蟠龙_数说产品阅读 8,044评论 0 3
  • 尴尬癌 我也好想放下手机 我也假装逃离寝室 我也想过不玩游戏 我也试着与你联系 只是心有顾忌 也怕打扰了你 只能暗...
    倦笔写流年阅读 1,924评论 0 0
  • 一直以来,我都憧憬着遇见自己的真命天子之后是两个人一起努力,各自变得越来越好。所以,我一直保持自己独立的观...
    Hephie阅读 3,652评论 0 0