SQL 统计字符出现的次数,你想统计某个字符或者子字符串在给定字符串里出现的次数,考虑如下的字符串。
SQL 统计字符出现的次数 问题描述
你想统计某个字符或者子字符串在给定字符串里出现的次数,考虑如下的字符串。
10,CLARK,MANAGER
你想知道该字符串里有多少个逗号。
SQL 统计字符出现的次数 解决方案
字符串的总长度减去去掉逗号之后的字符串长度,就得到了逗号的个数。所有的数据库管理系统都提供了获取字符串长度的函数以及从字符串里删除字符的函数。大多数情况下,这些函数分别是 LENGTH
和 REPLACE
(SQL Server 用户需要用内置函数 LEN
替换 LENGTH
)。
1 select (length('10,CLARK,MANAGER')-
2 length(replace('10,CLARK,MANAGER',',','')))/length(',')
3 as cnt
4 from t1
SQL 统计字符出现的次数 扩展知识
使用简单的减法运算就可以解决这个问题。第 1 行调用 LENGTH
函数获取字符串总长度,第 2 行仍然调用 LENGTH
函数获取不含逗号的字符串长度,而逗号的删除则借助了 REPLACE
函数。
把上述两个长度相减,得到的差值就是字符串里逗号的个数。最后的除法运算是用上述两个长度的差值除以我们正在搜索的那个字符串长度。如果被搜索的字符串的长度大于 1 的话,就必须使用除法运算。下面的例子统计在字符串 HELLO HELLO
中出现了多少个 LL
,如果没有进行除法运算的话,就不会得到正确的结果。
select
(length('HELLO HELLO')-
length(replace('HELLO HELLO','LL','')))/length('LL')
as correct_cnt,
(length('HELLO HELLO')-
length(replace('HELLO HELLO','LL',''))) as incorrect_cnt
from t1
CORRECT_CNT INCORRECT_CNT
----------- -------------
2 4