(转)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. Day Tips:Remote 服务器黑屏

    如果是台式机:CTRL+ALT+End 笔记本一般情况下End建和其他的键混合使用,所以是Fn+CTRL+ALT+End

  2. yii 项目根目录下需要有assets目录

    yii 项目根目录下需要有assets目录,如果没有,会导致gii失效

  3. 115个Java面试题和答案——终极列表(下)

    第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servle ...

  4. MonoDevelop几个常用的快捷键

    MonoDevelop几个常用的快捷键 CTRL+K  删除光标所在行的该行后面的代码 CTRL + ALT +C  注释/不注释该行 CTRL+ DOWN  像鼠标滚轮一样向下拖 CTRL + UP ...

  5. android Gui系统之SurfaceFlinger(3)---SurfaceFlinger

    7.SurfaceFlinger SurfaceFlinger在前面的篇幅了,多有涉及. SurfaceFlinger是GUI刷新UI的核心,所以任何关于SurfaceFlinger的改进都会对and ...

  6. 你知道C#中的Lambda表达式的演化过程吗

    你知道C#中的Lambda表达式的演化过程吗? 阅读目录 委托的使用 匿名方法 Func和Action Lambda的诞生 那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西 ...

  7. 试用 Nexus OSS 3.0 的docker仓库 (二)

    试用 Nexus OSS 3.0 的docker仓库 (一) : http://www.cnblogs.com/wzy5223/p/5410990.html 三. 创建docker私有仓库,docke ...

  8. 字符输出流Writer简要概括

    偷个懒,直接参考上篇字符输入流Reader的形式,其实Reader和Writer本来就大同小异: 字符输出流Writer 本篇将对JAVA I/O流中的字符输出流Writer做个简单的概括: 总得来说 ...

  9. C#中去掉表中重复的数据

    /// <summary> /// 去掉表中重复的数据  int /// </summary> /// <param name="SourceTable&quo ...

  10. python之装饰器

    一.简单装饰器: #定义装饰器函数 def W1(main_func): def outer(): print("before") main_func() print(" ...