利用MySQL存储过程分割字符串

转载 2013年12月03日 22:57:24

在MySQL数据库中,我们可以使用存储过程实现字符串的分割,下文就为您介绍该方法的完整实现过程,希望对您能有所启迪。

AD:2013云计算架构师峰会课程资料下载

MySQL存储过程可以用于分割字符串,下面就为您详细介绍这种MySQL存储过程的用法,供您参考学习之用。

现有一段字符串,如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 intRETURNS 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 nullDEFAULT 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存储过程分割字符串的方法介绍。

MySQL里实现类似SPLIT的分割字符串的函数

SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组,所以处理下来比较麻烦 下边的函数,实现了象数组一样去处理字符串...
  • chinajobs
  • chinajobs
  • 2016年12月23日 22:00
  • 2377

Mysql存储过程中字符串分割

今在项目中碰到了要把字符串分割,记录下来,以后可能还用的到 首先想上我的存储过程代码 DELIMITER $$ USE `bplate`$$ DROP PROCEDURE IF EXISTS ...
  • itslz
  • itslz
  • 2016年12月08日 18:14
  • 1749

POSTGRESQL 与MYSQL 实现分割字符串的方法对比

我这里列举了MYSQL和POSTGRESQL对字符串分割的方法对比总结。
  • yueliangdao0608
  • yueliangdao0608
  • 2014年01月08日 12:46
  • 3046

利用MySQL存储过程分割字符串

MySQL存储过程可以用于分割字符串,下面就为您详细介绍这种MySQL存储过程的用法,供您参考学习之用。 现有一段字符串,如apple,banana,orange,pears,grape,要把它按照...
  • yangjun19890825
  • yangjun19890825
  • 2014年11月04日 18:02
  • 1872

需求:MYSQL表中一个字段用逗号分隔,需要查出来split拆分并依次存入另一个表的一个字段中

需求:表中一个字段用逗号分隔,需要查出来split拆分并依次存入另一个表的一个字段中 假设问题是这丫那个的,table1中id=2的name值为'xiaoming,xiaohua,xiaowang,x...
  • shuanzia
  • shuanzia
  • 2015年10月14日 18:24
  • 21926

MYSQL创建一个 “将一个字符串以某个分隔符分隔得到多个值” 的函数,并为多个值加上序号

1:首先创建一个自定义函数实现分隔的功能:思路: (1、获取分隔符在源字符串中第一次出现的位置,把获取的位置之前的子字符串赋值给表的一列 (2、把第一步获取的位置之后的子字符串赋值为新的源字符串 ...
  • sinat_21382819
  • sinat_21382819
  • 2016年12月22日 16:31
  • 1464

MySql拆分字符串(split拆分查找)

最近碰到了一个需求,判断当前登录用户是否有权限查看这行数据,数据如表A所示,如果当前用户具有A,D权限,那么他就能查到 列名为(1,2,3,5)这四条数据,因为要分页显示所以用Java去写显得很麻烦,...
  • ltllml44
  • ltllml44
  • 2016年07月22日 00:47
  • 3664

MySQL种字符串拆分(substring_index)并作为关联查询条件后多列展示

本文欢迎转载,转载请注明出处,谢谢~(作者:喝酒不骑马 Colton_Null) from CSDN最近的项目中有个需求。有关用户的地址信息是存在person_info_t表中的address字...
  • Colton_Null
  • Colton_Null
  • 2017年08月08日 01:11
  • 240

C++中实现字符串分割方法

作为开头:在Java语言中,对String类的对象中都有一个splite方法来根据我们自己设定的分隔符“#”来将一串数字分割为一个个小的字符串,来达到我们的目的;这对于实现一些协议等是至关重要的;下面...
  • lwb102063
  • lwb102063
  • 2016年09月24日 09:40
  • 2668

工作笔记:正则切割字符串

对 “中华|人民|共和|国”这样的字符串进行切割 1、用FileOutputStream 把字符串写入文件中; 2、用FileInputStream(或者BufferedReader)对文件进...
  • androidxiaogang
  • androidxiaogang
  • 2015年11月15日 22:08
  • 539
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用MySQL存储过程分割字符串
举报原因:
原因补充:

(最多只允许输入30个字)