在SQL Server中使用正则表达式来验证字符串是否满足格式要求的方法

        在最近的工作中遇到了需要在SQL中使用正则表达式来判断字符串是否满足要求,来过滤不符合要求的字符串,在博客中翻阅了一些资料最后总结出了一个解决方案,希望能帮到有需要的人。

1、检查sql server的crl enabled是否开启

在SQL Server中执行   

SELECT * FROM sys.configurations WHERE name = 'clr enabled' 

   语句,得到如下图的结果

若value值为”1”,代表开启,为”0”则表示未开启

若未开启则在SQL Server中执行以下代码

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;

2、检查SQL Server主机的.NET版本

进入命令行模式输入以下命令

cd %WINDIR%\Microsoft.NET\Framework\v4.0.30319
MSBuild /version

得到如下图的结果    (我的版本是4.8)

3、创建SQL Server 项目并修改环境

打开Visual Studio 编译器  (这里我用的是2022版本)

创建SQL Server 项目

创建好之后,右键项目点击属性,修改目标平台   (这里我的是SQL Server 2016)

修改目标框架与权限级别

4、新建文件

5、编写代码

下图是C#代码

代码如下

        [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true, IsPrecise = true)]
        public static SqlBoolean RegexLike(SqlString input, SqlString pattern)
        {
            if (input.IsNull || pattern.IsNull)
            {
                return new SqlBoolean(false);
            }
            bool result = Regex.IsMatch(input.Value, pattern.Value);
            return new SqlBoolean(result);
        }

在编写过程中若遇到System.Text.RegularExpressions; 与System.Data.SqlTypes;无法引入,那么请添加程序集,如下图

编写完成后生成解决方案得到dll文件,如下图

6、创建SQL Server数据库的程序集

在对应的数据库中新建查询并写入以下代码并执行

CREATE ASSEMBLY [Regular]   --[]中为程序集名称,这个可以自定义
Authorization [dbo]
FROM 'D:\MySQLCRL\MySQLCRL\bin\Debug\MySQLCRL.dll'  --这里是之前创建的dll文件的物理路径
WITH PERMISSION_SET = SAFE

7、创建方法

在数据库中执行以下代码

CREATE FUNCTION dbo.fn_Regex (     --fn_Regex为方法名称,可自定义
@input nvarchar(4000),             --参数一,你的验证的表达式
@pattern nvarchar(1000)			--参数二,你的正则表达式
 ) RETURNS bit  --这个是返回值的类型,返回值的类型要与C#程序的返回值类型对应
AS EXTERNAL NAME Regular.[MySQLCRL.MyCRLRegular].RegexLike; 
-- Regular 是之前创建的程序集的名称
-- MySQLCRL 是C#程序的命名空间
-- MyCRLRegular 是C#程序的类型名称
-- RegexLike 是C#程序中的方法名

8、使用方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQL Server本身并不直接支持正则表达式的功能。但是可以通过使用CLR(Common Language Runtime)来扩展SQL Server的功能,从而实现正则表达式使用。 以下是一种使用CLR扩展实现正则表达式方法: 1. 创建一个CLR程序集,其包含正则表达式的逻辑。可以使用C#或VB.NET编写CLR程序集。 2. 将CLR程序集部署到SQL Server。 3. 在SQL Server创建一个存储过程或函数,该存储过程或函数调用CLR程序集方法来执行正则表达式匹配。 下面是一个示例,演示如何在SQL Server使用正则表达式: 1. 创建CLR程序集: ```csharp using System; using System.Data.SqlTypes; using System.Text.RegularExpressions; using Microsoft.SqlServer.Server; public class RegexFunctions { [SqlFunction] public static SqlBoolean RegexMatch(SqlString input, SqlString pattern) { if (input.IsNull || pattern.IsNull) return SqlBoolean.Null; return Regex.IsMatch(input.Value, pattern.Value); } } ``` 2. 将CLR程序集部署到SQL Server: ```shell CREATE ASSEMBLY RegexFunctions FROM 'C:\Path\To\RegexFunctions.dll' WITH PERMISSION_SET = SAFE; ``` 3. 创建存储过程或函数来调用CLR程序集方法: ```sql CREATE FUNCTION dbo.RegexMatch(@input NVARCHAR(MAX), @pattern NVARCHAR(MAX)) RETURNS BIT AS EXTERNAL NAME RegexFunctions.RegexMatch; ``` 现在,你可以在SQL Server使用`dbo.RegexMatch`函数来执行正则表达式匹配。例如: ```sql SELECT dbo.RegexMatch('/Book/103.aspx', '/book/(\d+).aspx') AS MatchResult; ``` 这将返回一个布尔值,指示输入字符串是否正则表达式模式匹配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值