统计字符串TenderString1中SPT出现次数的公式结果不符合预期
字符串内指定子串出现次数统计的公式修正
错误原因定位
当前公式计算结果异常的根源是括号位置错位触发的运算优先级偏差:
使用的计算公式 (LEN(TenderString1) - LEN(REPLACE(TenderString1, 'SPT', '')) / LEN('SPT')) 中,除法运算优先级高于减法,实际执行逻辑为:计算「原字符串长度 - (移除全部SPT后的字符串长度 ÷ SPT字符长度)」,完全偏离了“统计被替换移除的总字符数、按单次匹配的字符长度折算出现次数”的设计目标。
修正后的正确公式
将差值计算的完整范围纳入括号包裹,再执行除法运算,调整后写法为:(LEN(TenderString1) - LEN(REPLACE(TenderString1, 'SPT', ''))) / LEN('SPT')
实际场景验证
针对实际内容为UAD,MTY,CL,CLTG,OFD,OFD,SPT,SL的TenderString1列值,代入修正公式计算:
- 原字符串总长度为36
- 替换所有SPT为空字符串后的剩余内容总长度为33
- 长度差值为3,除以SPT本身的字符长度3,最终返回结果为1,匹配预期的正确值。
适用说明
这类计数逻辑仅适用于不存在交叉重叠匹配的场景。由于当前业务字符串是逗号分隔的独立枚举值列表,SPT为独立列表项,不会和相邻字符拼接形成跨位置的SPT子串,计数结果不会出现偏差。
内容的提问来源于stack exchange,提问作者Drew M
相关产品推荐
相关产品推荐

