mssql sqlserver 使用正则表达式的方法分享


摘要:
我们深知使用正则表达式可以快速匹配字符串是否符合相关要求,但是sqlserver原生态的sql脚本不支持正则表达式
下文将讲述让sqlserver支持正则表达式的方法,如下所示:
实验环境:sqlserver 2008 R2



实现思路:
使用c#语言为sqlserver建立一个CLR程序集函数,供sql脚本调用,变相的使sqlserver拥有正则表达式匹配的功能
使用sql中CLR函数

具体实现步骤:
1.打开VS 建立 dataBase项目
mssql_sqlserver_clrFunction_8468

mssql_sqlserver_clrFunction_8468


2.在项目中添加dbFunction文件
mssql_sqlserver_clrFunctionAddFile_8468

mssql_sqlserver_clrFunctionAddFile_8468


3.添加正则表达式实现代码,并编译发布
clr正则表达式c#代码实现

clr正则表达式c#代码实现


4.注册dll至sqlserver引擎中

  /// 
   /// 正则表达式匹配验证
   /// 
   /// 待验证字符串
   /// 正则表达式
   /// 是否忽略大小写
   /// 返回true 代表验证成功  返回false 代表验证失败
    [Microsoft.SqlServer.Server.SqlFunction]
    public static bool FnRegexMatch(string str, string pattern, bool ignoreCase)
    {
        bool isMatch = false;
        if (!string.IsNullOrEmpty(str) && !string.IsNullOrEmpty(pattern))
        {
            try
            {
                Match match = null;
                if (ignoreCase)
                    match = Regex.Match(str, pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
                else
                    match = Regex.Match(str, pattern, RegexOptions.Multiline | RegexOptions.Compiled);

                if (match.Success)
                    isMatch = true;
            }
            catch { }
        }
        return isMatch;
    }

将编译生成的dll,注册至 数据库中,我们就可以使用

//检测输入的字符是否为 月份
select dbo.FnRegexMatch("^(0?[1-9]|1[0-2])$",13,false);

相关阅读:
MSSQL SQl server 2008 CLR 存储过程创建举例
何时选择CLR存储过程 何时选择T-SQL存储过程
删除CLR存储过程和删除CLR程序集的方法