zoukankan      html  css  js  c++  java
  • sql server使用正则表达式

    目标

    为数据库创建一个正则表达式函数,供查询使用
    不建议使用函数,能查询到内存里面用代码解决的就用代码解决!!!
    这里的方法仅供参考

    操作

    1.新建sql server项目
    1
    2.定义正则表达式的方法

    public class SqlFunction
    {
        /// 是否匹配正则表达式
        /// </summary>
        /// <param name="input">输入的字符串</param>
        /// <param name="pattern">正则表达式</param>
        /// <param name="ignoreCase">是否忽略大小写</param>
        /// <returns></returns>
        [Microsoft.SqlServer.Server.SqlFunction]
        public static bool RegexMatch(string input, string pattern, bool ignoreCase)
        {
            bool isMatch = false;
            if (!string.IsNullOrEmpty(input) && !string.IsNullOrEmpty(pattern))
            {
                try
                {
                    Match match = null;
                    if (ignoreCase)
                        match = Regex.Match(input, pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
                    else
                        match = Regex.Match(input, pattern, RegexOptions.Multiline | RegexOptions.Compiled);
    
                    if (match.Success)
                        isMatch = true;
                }
                catch { }
            }
            return isMatch;
        }
    
        /// 获取正则表达式分组中的字符
        /// </summary>
        /// <param name="input">输入的字符串</param>
        /// <param name="pattern">正则表达式</param>
        /// <param name="groupId">分组的位置</param>
        /// <param name="maxReturnLength">返回字符的最大长度</param>
        /// <returns></returns>
        [Microsoft.SqlServer.Server.SqlFunction]
        public static string GetRegexMatchGroups(string input, string pattern, int groupId, int maxReturnLength)
        {
            string strReturn = string.Empty;
            if (!string.IsNullOrEmpty(input) && !string.IsNullOrEmpty(pattern))
            {
                try
                {
                    Match match = Regex.Match(input, pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.Compiled);
                    if (match.Success && (groupId < match.Groups.Count))
                    {
                        strReturn = match.Groups[groupId].Value;
                        strReturn = (strReturn.Length <= maxReturnLength) ? strReturn : strReturn.Substring(0, maxReturnLength);
                    }
                }
                catch
                {
                    return string.Empty;
                }
            }
            return strReturn;
        }
    }
    

    3.配置数据库相关信息
    右键-属性,设置连接字符串,可以设置多个连接
    2
    设置数据库版本
    3
    4.右键,发布
    选择目标数据库即可
    4

    使用
    --注意N不能遗漏  
    --注意sql里面的"true","false"对应1,0
    where dbo.RegexMatch(table.property,N'"title":"[^"]*搜索内容[^"]*"',1)=1    
    

    注意事项

    1.发布报错:执行 CREATE ASSEMBLY 时失败,因为该程序集是为公共语言用户时的不受支持的版本生成的
    SQL SERVER 2008R2 不支持.net4.0, 需要把项目改成.net3.5 部署成功了

    2.执行sql报错:禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项
    执行:

    exec sp_configure 'show advanced options', '1';
    go
    reconfigure;
    go
    exec sp_configure 'clr enabled', '1'
    go
    reconfigure;
    exec sp_configure 'show advanced options', '1';
    go
    

    参考资料:禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项

    参考资料

    SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问的解决方法
    SQL Server中使用正则表达式
    在VS2013中新建SQL Server项目,如何使用?

    其他——PATINDEX

    where PATINDEX(N'%搜索内容%', table.property)>=1
    

    这里是使用通配符匹配
    PATINDEX (Transact-SQL)
    返回的是匹配的位置序号,不匹配返回0,判断序号>=1,即匹配

  • 相关阅读:
    Caliburn.Micro框架之Bindings
    Excel批量插入的SQL Server
    简单的物流项目实战,WPF的MVVM设计模式(五)
    简单的物流项目实战,WPF的MVVM设计模式(四)
    简单的物流项目实战,WPF的MVVM设计模式(三)
    简单的物流项目实战,WPF的MVVM设计模式(二)
    简单的物流项目实战,WPF的MVVM设计模式(一)
    系统架构——负载均衡整理总结
    .NET知识梳理——8.AOP
    .NET知识梳理——7.Linq
  • 原文地址:https://www.cnblogs.com/Lulus/p/9497861.html
Copyright © 2011-2022 走看看