一个简单的判断子串个数的函数

简介:
MySQL本身没有判断子串个数的函数。
所以我写了一个,以备参考。
函数体如下:

DELIMITER $$

DROP FUNCTION IF EXISTS `test`.`func_get_string_count`$$

CREATE FUNCTION `test`.`func_get_string_count`(
 f_str varchar(8000), f_substr varchar(255))
RETURNS int
BEGIN
  -- Created by david yeung 20080226.
  declare total int default 0;
  declare remain_str varchar(8000) default '';
  set remain_str = f_str;
  while instr(remain_str,f_substr) > 0
  do
    set total = total + 1;
    set remain_str = substring(remain_str,instr(remain_str,f_substr) + char_length(f_substr));
  end while;
  return total;
END$$

DELIMITER 
;

调用结果:
select func_get_string_count('I love you love,""&&&& I love, I hate, love love love','love') as substr_count;

query result(1 records)

substr_count
6



不过你可以完全用系统提供的函数来组合。
看看例子:


set @str = 'I love you love,""&&&& I love, I hate, love love love';
set @sub_str = 'love';
select ceiling((char_length(@str) - char_length(replace(@str,@sub_str,'')))/char_length(@sub_str)) as substr_count;

结果:

query result(1 records)

substr_count
6





本文转自 yarin 51CTO博客,原文链接:http://blog.51cto.com/yueliangdao0608/81265,如需转载请自行联系原作者

相关文章
|
26天前
|
存储 算法 索引
|
26天前
|
存储 Java 数据处理
|
1月前
|
算法 Java
LeetCode第28题找出字符串中第一个匹配项的下标
这篇文章介绍了LeetCode第28题"找出字符串中第一个匹配项的下标"的两种解法:暴力解法和KMP算法,并解释了KMP算法通过构建前缀表来提高字符串搜索的效率。
LeetCode第28题找出字符串中第一个匹配项的下标
|
3月前
字符串\判断回文
字符串\判断回文
18 2
|
3月前
leetcode题解:28.找出字符串中第一个匹配项的下标
leetcode题解:28.找出字符串中第一个匹配项的下标
19 0
|
4月前
【力扣】28. 找出字符串中第一个匹配项的下标
【力扣】28. 找出字符串中第一个匹配项的下标
​判断给定字符序列是否是回文
​判断给定字符序列是否是回文
68 0
|
算法
LeetCode:28. 找出字符串中第一个匹配项的下标
题目描述:给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
|
Java
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
109 0
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
|
算法 Java C语言
找出字符串中第一个匹配项的下标 (LeetCode 28)
找出字符串中第一个匹配项的下标 (LeetCode 28)
194 0