利用MySQL存储过程分割字符串
2014-10-14 09:42
246 查看
MySQL存储过程可以用于分割字符串,下面就为您详细介绍这种MySQL存储过程的用法,供您参考学习之用。
现有一段字符串,如apple,banana,orange,pears,grape,要把它按照逗号(,)分割成:
apple
banana
orange
pears
grape
然后使用where in()方法可以查询。
运行结果如下,说明分割成功:
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>
现有一段字符串,如apple,banana,orange,pears,grape,要把它按照逗号(,)分割成:
apple
banana
orange
pears
grape
然后使用where in()方法可以查询。
1、具体函数:
# 函数:func_split_TotalLength DELIMITER $$ DROP function IF EXISTS `func_split_TotalLength` $$ CREATE DEFINER=`root`@`%` FUNCTION `func_split_TotalLength` (f_string varchar(1000),f_delimiter varchar(5)) RETURNS int(11) BEGIN # 计算传入字符串的总length return 1+(length(f_string) - length(replace(f_string,f_delimiter,''))); END$$ DELIMITER;
# 函数:func_split DELIMITER $$ DROP function IF EXISTS `func_split` $$ CREATE DEFINER=`root`@`%` FUNCTION `func_split` (f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8 BEGIN # 拆分传入的字符串,返回拆分后的新字符串 declare result varchar(255) default ''; set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1)); return result; END$$ DELIMITER;
# 存储过程:splitString DELIMITER $$ DROP PROCEDURE IF EXISTS `splitString` $$ CREATE PROCEDURE `splitString` (IN f_string varchar(1000),IN f_delimiter varchar(5)) BEGIN # 拆分结果 declare cnt int default 0; declare i int default 0; set cnt = func_split_TotalLength(f_string,f_delimiter); DROP TABLE IF EXISTS `tmp_split`; create temporary table `tmp_split` (`status` varchar(128) not null) DEFAULT CHARSET=utf8; while i < cnt do set i = i + 1; insert into tmp_split(`status`) values (func_split(f_string,f_delimiter,i)); end while; END$$ DELIMITER;
2、测试是否能成功分割
call splitString("apple,banana,orange,pears,grape",","); 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()查询
# 先传入字符串,分割后保存在临时表tmp_split中 call splitString("apple,banana,orange,pears,grape",","); # 将查询的结果作为其他查询的条件来使用 select * from fruit where in(select * from tmp_split);
相关文章推荐
- 利用MySQL存储过程分割字符串
- 利用MySQL存储过程分割字符串
- 利用MySQL存储过程分割字符串
- 利用MySQL存储过程分割字符串
- 利用MySQL存储过程分割字符串
- mysql 通过存储过程分割字符串为数组
- mysql存储过程字符串分割
- 利用反射传输存储过程参数,在mssql和mysql两种数据库中存在的问题
- mysql 存储过程中利用游标循环结果集
- 【MySql】 MySQL存储过程常用的函数(字符串类型操作,数学类,日期时间类)
- mysql利用存储过程批量插入数据
- mysql 利用mysqldump 导入导出表结构、数据、存储过程及函数
- mysql字符串拼接,存储过程
- MSSQL 和 Mysql 切割字符串 自定义函数与存储过程
- MySQL存储过程里字符串拼接返回参数的方法
- mysql存储过程随机产生字符串
- Sql Server 存储过程对分割字符串
- 存储过程分割字符串查询
- 利用join的巧妙思想(分割字符串并存储到表格中――两种不同思想)
- 关于对MYSQL存储过程传递参数是纯数字还是字符串的判断