(转)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. Navicat for Oracle实现连接Oracle

    不知道为什么,从一开始,我就不喜欢Oracle,名字好听,功能强大,但总感觉"高不可攀";或许是因为我觉得其他的数据库就可以解决数据问题,不太了解Oracle的优势:而且它长得也不 ...

  2. user profile services提示“BAIL: MMS(7116): sql.cpp(8490): 0x80231334 (The sql connection string has unsupported values.)”解决办法

    user profile services的2个服务Forefront Identity Manager Service 和 Forefront Identity Manager Synchroniz ...

  3. react native 的js 文件从哪里获取

    /** * Loading JavaScript code - uncomment the one you want. * * OPTION 1 * Load from development ser ...

  4. cocoapods安装完第三方类库后不生成workspace

    cocoapods的版本太低,更新cocoapod版本:sudo gem install cocoa pods

  5. Android studio 使用SVN需要忽略的文件

    Android Studio创建的Android项目一般需要忽略 1..idea文件夹 2..gradle文件夹 3.所有的build文件夹 4.所有的.iml文件 5.local.propertie ...

  6. 【代码笔记】iOS-读取一段文字

    一,效果图. 二,工程图. 三,代码. RootViewController.m #import "RootViewController.h" @interface RootVie ...

  7. linux 学习随笔-vim

    在自己的home/username目录下 更改vim的配置文件 如果没这个文件 copy其他人的配置文件 然后拖到此目录下 执行mv vimrc ~/.vimrc 更改名字 即可生效 只对当前用户生效 ...

  8. 解析ABP框架中的事务处理和工作单元,ABP事务处理

    通用连接和事务管理方法连接和事务管理是使用数据库的应用程序最重要的概念之一.当你开启一个数据库连接,什么时候开始事务,如何释放连接...诸如此类的. 正如大家都知道的,.Net使用连接池(connec ...

  9. SQL Server 2012实施与管理实战指南(笔记)——Ch5启动SQL Server服务和数据库

    5.启动SQL Server服务和数据库 在数据库和服务启动过程中,经常会出现的问题: 1.SQL Server实例无法正常启动 2.系统数据库无法正常启动 3.网络配置失败 4.用户数据库无法启动 ...

  10. python写的分析mysql binlog日志工具

    因为数据库增删改突然暴增,需要查询是那些表的操作特别频繁,写了一个用来分析bin-log的小工具,找出增删改查的表,并按照操作次数降序排列,以下是代码: 1 2 3 4 5 6 7 8 9 10 11 ...