ListValueCount正确用法:统计字符串中?数量返回0如何解决
问题原因说明
你调用ListValueCount返回0是因为对该函数的作用逻辑理解有误:
ListValueCount的核心作用是统计列表中完全等于指定值的元素数量,它的工作逻辑是先按你传入的分隔符把字符串拆分为多个独立元素,再逐个判断元素是否和你要匹配的值完全一致。- 你传入的SQL字符串按逗号拆分后,每个元素都是类似
UPDATE personnel SET personnel_id = ?、personnel_name = ?的内容,这些元素整体不等于?,自然匹配不到任何结果,所以返回0。
ListValueCount正确用法示例
如果一定要用ListValueCount实现统计需求,需要先对字符串做预处理,让拆分后的列表元素刚好等于你要匹配的?:
<cfscript> myString="UPDATE personnel SET personnel_id = ?, personnel_name = ?, personnel_nric = ?, personnel_staff_num = ?, personnel_designation = ?, personnel_department = ?, personnel_appointed_start_date = ?, personnel_appointed_end_date = ?, personnel_inspection_date = ?, personnel_org_id = ?, lt_dispose_personnel_type_id = ? WHERE id = 49;" // 预处理:移除字符串中所有非?的字符,得到仅由?组成的字符串 processed = REReplace(myString, "[^?]", "", "all") // 用空字符作为分隔符拆分,每个元素都是单独的? count = ListValueCount(processed, "?", "") writeOutput("The count of ? is: " & count) </cfscript>
更简便的替代实现
统计单个字符在字符串中的出现次数,不需要强制使用ListValueCount,推荐两种更简洁高效的方案:
1. 长度差法(最常用)
// 原字符串长度减去移除所有?后的字符串长度,就是?的数量 count = Len(myString) - Len(Replace(myString, "?", "", "all"))
2. 列表长度计算法
// 用?作为分隔符拆分字符串,元素数量减1就是?的出现次数 count = ListLen(myString, "?") - 1
内容的提问来源于stack exchange,提问作者sg552
相关产品推荐
相关产品推荐

