PCB SQL SERVER 字段模糊匹配个数 实现方法

今天工程系统给到加投加投组件的数据规则修改,遇到需将一个字段模糊匹配的个数统计

这类需求要平时应该很少遇到了,这里将此方法分享出来,

一.需求如下

     例子:itempara字段中的内容是:

                IVH板 铜镍金板 POFV板 HDI+光电板 +超长板 

                       需模糊匹配4个文本在 ServerIVH背板超长板  itempara字段中出现的次数

                        通过匹配:次数为2次

二.C# 写SQL SERVER函数代码实现

      /// <summary>
        /// 获取like字段统计总数
        /// </summary>
        /// <param name="CurrentFied">ABCDABCGKDB</param>
        /// <param name="pendingString">A,C,D</param>
        /// <returns>得到A的个数+C的个数+D的个数</returns>
        [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read, IsDeterministic = true, Name = "getLikeCount")]
        public static SqlInt32 getLikeCount(SqlString CurrentFied, SqlString pendingString)
        {
            SqlInt32 resultInt = 0;
            string str = CurrentFied.ToString();
            var stringList = pendingString.ToString().Split(',');
            foreach (var item in stringList)
            {
                if (!string.IsNullOrEmpty(item))
                {
                    resultInt +=  Regex.Matches(str, item).Count;
                }
            }
            SqlInt32 SqlResult = resultInt;
            return SqlResult;
        }

三.SQL SERVER修改程序集与创建getLikeCount函数

   alter  ASSEMBLY SQLfunctionAssembly   
   FROM 'D:SQLClr.dll'      --改为自己C#写的dll路径填写
   WITH PERMISSION_SET = UNSAFE;   

   
    CREATE FUNCTION[dbo].[getLikeCount] (
    @CurrentFied NVARCHAR(max),
    @pendingString NVARCHAR(1000)
    )
    RETURNS int
    WITH EXECUTE AS CALLER        
    AS
    EXTERNAL NAME [SQLfunctionAssembly].[SQLClr.SQLfunction].[getLikeCount]    --[SQL程序集名].[命名空间.类名].[方法名]

四.SQL 函数测试

    SQL调用函数代码:

    select dbo.getLikeCount('IVH板 铜镍金板 POFV板 HDI+光电板 +超长板 ','Server,IVH,背板,超长板')
    select dbo.getLikeCount('IVH板 + 背板 + Server+ 超长板 ','Server,IVH,背板,超长板')

    测试结果如下:  

    

原文地址:https://www.cnblogs.com/pcbren/p/9599175.html