如何统计SQLite单元格中子字符串匹配次数?附示例查询构造
如何在SQLite中统计单元格中子字符串的匹配次数?
嘿,这个问题我刚好处理过!SQLite本身没有内置的函数直接统计子字符串的出现次数,但我们可以通过字符串长度差值法来实现,思路非常直观:
核心原理
把目标子串从原字符串中全部替换为空字符串,用原字符串的长度减去替换后的字符串长度,得到的差值就是所有目标子串的总长度。再用这个差值除以单个目标子串的长度,就能得到出现次数啦。
针对你的需求的具体实现
假设你的表名为your_table,存储字符串的字段名为content,要统计的单词是row:
1. 区分大小写的统计(仅匹配小写"row")
如果需要严格区分大小写(比如只算小写的"row",不算大写的"Row"),直接使用REPLACE函数:
SELECT (LENGTH(content) - LENGTH(REPLACE(content, 'row', ''))) / LENGTH('row') AS row_count FROM your_table;
在你的示例字符串"Row row row your boat,"中,这个查询会返回2(因为只有两个小写的"row")。
2. 不区分大小写的统计(匹配所有大小写形式的"row")
如果需要忽略大小写,把原字符串和目标子串统一转成小写(或大写)后再处理:
SELECT (LENGTH(content) - LENGTH(REPLACE(LOWER(content), 'row', ''))) / LENGTH('row') AS row_count FROM your_table;
这个查询会把原字符串中的Row转成row,替换后计算得到的结果就是3,正好符合你的需求。
额外优化:处理NULL值
如果字段可能存在NULL,可以用IFNULL函数把结果转为0,避免返回NULL:
SELECT IFNULL((LENGTH(content) - LENGTH(REPLACE(LOWER(content), 'row', ''))) / LENGTH('row'), 0) AS row_count FROM your_table;
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

