(转)http://tec.5lulu.com/detail/104krn1e6p2w78d77.html

现有一段字符串,如apple,banana,orange,pears,grape,要把它按照逗号(,)分割成:

apple
banana
orange
pears
grape

然后使用where in()方法可以查询。

1、具体函数:

  1. # 函数:func_split_TotalLength
  2. DELIMITER $$
  3. DROP function IF EXISTS `func_split_TotalLength` $$
  4. CREATE DEFINER=`root`@`%` FUNCTION `func_split_TotalLength`
  5. (f_string varchar(1000),f_delimiter varchar(5)) RETURNS int(11)
  6. BEGIN
  7. # 计算传入字符串的总length
  8. return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));
  9. END$$
  10. DELIMITER;
  1. # 函数:func_split
  2. DELIMITER $$
  3. DROP function IF EXISTS `func_split` $$
  4. CREATE DEFINER=`root`@`%` FUNCTION `func_split`
  5. (f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8
  6. BEGIN
  7. # 拆分传入的字符串,返回拆分后的新字符串
  8. declare result varchar(255) default '';
  9. set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));
  10. return result;
  11. END$$
  12. DELIMITER;
  1. # 存储过程:splitString
  2. DELIMITER $$
  3. DROP PROCEDURE IF EXISTS `splitString` $$
  4. CREATE PROCEDURE `splitString`
  5. (IN f_string varchar(1000),IN f_delimiter varchar(5))
  6. BEGIN
  7. # 拆分结果
  8. declare cnt int default 0;
  9. declare i int default 0;
  10. set cnt = func_split_TotalLength(f_string,f_delimiter);
  11. DROP TABLE IF EXISTS `tmp_split`;
  12. create temporary table `tmp_split` (`status` varchar(128) not null) DEFAULT CHARSET=utf8;
  13. while i < cnt
  14. do
  15. set i = i + 1;
  16. insert into tmp_split(`status`) values (func_split(f_string,f_delimiter,i));
  17. end while;
  18. END$$
  19. DELIMITER;

2、测试是否能成功分割

  1. call splitString("apple,banana,orange,pears,grape",",");
  2. select * from tmp_split;

运行结果如下,说明分割成功:

mysql> call splitString("apple,banana,orange,pears,grape",",");
select * from tmp_split;
Query OK, 1 row affected

+--------+
| status |
+--------+
| apple  |
| banana |
| orange |
| pears  |
| grape  |
+--------+
5 rows in set

mysql>

3、应用where in()查询

    1. # 先传入字符串,分割后保存在临时表tmp_split中
    2. call splitString("apple,banana,orange,pears,grape",",");
    3. # 将查询的结果作为其他查询的条件来使用
    4. select * from fruit where in(select * from tmp_split);

利用MySQL存储过程分割字符串的更多相关文章

  1. 利用Mysql提供的字符串方法查找字符串中某字符出现的次数

    有这么一个需求,查出分类中没有子分类的一级分类,脑海中首次出现的解决思路和这样的 先使用PHP查出所有的一级分类 递归查询一级分类是否有子分类 将没有子分类的一级分类汇总 但觉的这样处理太麻烦了,然后 ...

  2. Java开发笔记(三十七)利用正则串分割字符串

    前面介绍了处理字符串的常用方法,还有一种分割字符串的场景也很常见,也就是按照某个规则将字符串切割为若干子串.分割规则通常是指定某个分隔符,根据字符串内部的分隔符将字符串进行分割,例如逗号.空格等等都可 ...

  3. mysql 存储过程 CONCAT 字符串拼接

    mysql 存储过程 CREATE PROCEDURE pro_province_report (IN startDate VARCHAR(),IN endDate VARCHAR(),IN Sour ...

  4. mysql存储过程中字符串参数单引号

    注意:存储过程中单引号  ,四个单引号 SET @sql = CONCAT('select user_id into ',m_user_id,' from go_user where mobile = ...

  5. 利用MySQL存储过程批量插入100W条测试数据

    DROP PROCEDURE IF EXISTS insert_batch; CREATE PROCEDURE insert_batch() BEGIN ; loopname:LOOP '); ; T ...

  6. php 逗号 explode分割字符串 或 implode组装成字符串

    php 逗号 分割字符串 介绍两个函数给你 <?php //利用 explode 函数分割字符串到数组 $source = "hello1,hello2,hello3,hello4,h ...

  7. php和mysql两种不同方式的分割字符串和类型转换

    一.sql语句1.分割字符串方法:substring_index(字符串,'分隔符',正数从左数起几位/负数从右数起几位); 例如:subtring_index('aa_bb_cc_dd','_',1 ...

  8. C#利用substring按指定长度分割字符串

    这几天学习分析声音的波形数据,接收到的是十六进制的数据,需要将数据转换成十进制再绘图,这个过程涉及到字符串的分割,正好可以促进自己对C#相关知识的学习.说到分割字符串,我首先想到的是Split,但根据 ...

  9. 【数据库】MySql分割字符串

    上论坛时看到一个骨骼清奇的分割字符串算法. DROP TABLE IF EXISTS Tmp_AreaCode; CREATE TABLE Tmp_AreaCode( string ) )ENGINE ...

随机推荐

  1. SAP中禁止特定用户更改密码

    在SAP管理中,有时一些账号因为是提供给大家作查询用的,受密码强度策略限制,密码不能为空.故密码设为通用后在公司内发布,为避免有些用户更改后造成其他用户无法登陆,我们可在使用TC-SU01,在登录数据 ...

  2. Android Activity动画

    动画XML文件 slide_right_in.xml <?xml version="1.0" encoding="utf-8"?> <set ...

  3. ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

    本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...

  4. jQuery删除节点和追加节点

    for (var i in checkedBoxIds) { var $td = $("#" + checkedBoxIds[i]).parent().parent().detac ...

  5. XMLA连接器--免费但不开源通过ODBO、XMLA

    XMLA 连接器(驱动) :来自ARQUERY   http://jaist.dl.sourceforge.net/project/xmlaconnect/XMLA_Provider_v1.0.0.1 ...

  6. 示例详解:UIScrollview 与 Autolayout 的那点事

    前言 自从写了介绍Masonry那篇文章以后 就一直有人对UIScrollView的那个例子不是很理解 UIView *container = [UIView new]; [scrollView ad ...

  7. 谈谈yii2-gii如何自定义模板

    作者:白狼 出处:http://www.manks.top/article/yii2_gii_custom_template本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位 ...

  8. eclipse配置文件导出问题

    关于eclipse配置文件导出问题 eclipse的默认配置一般不能满足我们的要求,我们一般会修改一些配置,如字体.背景颜色.快捷键及一些template等等,这样方便我们的开发.可是当我们新建一个工 ...

  9. centos7 ssh 设置key认证

    vi /etc/ssh/sshd_config 查找RSAAuthentication.StrictModes.PubkeyAuthentication.AuthorizedKeysFile把所在行修 ...

  10. 【hadoop】——HDFS解压缩实现

    转载请注明出处:http://www.cnblogs.com/zhengrunjian/p/4527220.html 所有源码在github上,https://github.com/lastsweet ...