博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

上帝他爷

分别担任CU、ITPUB以及CSDN社区的MySQL版主! 我本来想说我是吃屎的! ^_^
  yueliangdao0608.cublog.cn

关于作者
姓名:杨涛
职业:DBA
年龄:25
位置:中国-深圳
个性介绍:又长了一岁
QQ:38257291
MSN:yueliangdao0608@gmail.com
|| << >> ||
我的分类


[原创]一个简单的判断子串个数的函数


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

发表于: 2008-02-26,修改于: 2008-04-02 18:02,已浏览516次,有评论3条 推荐 投诉


网友评论
网友: 本站网友 时间:2008-04-01 13:05:15 IP地址:219.143.46.★
嗯,简单,但很实用,谢了.

网友: 本站网友 时间:2008-05-08 17:27:07 IP地址:124.207.200.★
学习!

网友: 本站网友 时间:2008-05-29 18:23:18 IP地址:210.21.254.★
一般

Blog作者的回复:
有更好的办法吗?谢谢提意见!


 发表评论