今天工程系统给到加投加投组件的数据规则修改,遇到需将一个字段模糊匹配的个数统计
这类需求要平时应该很少遇到了,这里将此方法分享出来,
一.需求如下
例子:itempara字段中的内容是:
IVH板 铜镍金板 POFV板 HDI+光电板 +超长板
需模糊匹配4个文本在 Server 或 IVH 或 背板 或 超长板 在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,背板,超长板')
测试结果如下: