本文方法来自:牛客网:查找字符串’10,A,B’ 中逗号’,’出现的次数cnt

题目:查找字符串’10,A,B’ 中逗号’,’出现的次数cnt。

思路:先用replace函数将原串中出现的子串用空串替换,再用原串长度减去替换后字符串的长度,最后除以子串的长度。

1
2
3
SELECT (
(length("10,A,B") - length(replace("10,A,B", ",", ""))) / length(",")
) AS cnt;

(原串10,A,B长度6-替换串10AB长度4) / 子串,长度1 = 子串出现次数2

扩展1

题目:查找字符串’10,,A,,B’ 中逗号’,,’出现的次数cnt。

1
2
3
SELECT (
(length("10,,A,,B") - length(replace("10,,A,,B", ",,", ""))) / length(",,")
) AS cnt;

因为原串中的子串使用空串代替的,所以当子串的长度超过1时,还需要除去子串本身的长度。
(原串10,,A,,B长度8-替换串10AB长度4) / 子串,,长度2 = 子串出现次数2

扩展2

题目:查找字符串’我。。喜欢。。你’ 中句号’。。’出现的次数cnt。

1
2
3
SELECT (
(char_length("我。。喜欢。。你") - char_length(replace("我。。喜欢。。你", "。。", ""))) / char_length("。。")
) AS cnt;

如果考虑到中文的话,其实应该用char_length()函数,统计的是字符长度。