MySQL存储过程可以用于分割字符串,下面就为您详细介绍这种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下将分隔字符串转换为数组的更多相关文章

  1. PHP文本处理之中文汉字字符串转换为数组

    在PHP中我们可以通过str_split 将字符串转换为数组,但是却对中文无效,下面记录一下个人将中文字符串转换为数组的方法. 用到的PHP函数 mb_strlen - 获取字符串的长度 mb_sub ...

  2. 【php】php分隔字符串为数组

    工作中会经常分隔字符串为数组,我们可以用php内置函数str_split(),可是有时候字符串中包含中文,切割后会乱码,比如 print_r(str_split('dw氛围fesf',3)); 输出 ...

  3. PHP文本处理 中文汉字字符串 转换为数组

    在PHP中我们可以通过str_split 将字符串转换为数组,但是却对中文无效,下面记录一下个人将中文字符串转换为数组的方法. 用到的PHP函数 mb_strlen — 获取字符串的长度 functi ...

  4. 微信开发所需要的的方法(签名认证、数组转字符串方法、将xml字符串转换为数组、发送xml请求方法)

    //将xml字符串转换为数组 public function xmlToArray($xml){ $array_data = json_decode(json_encode(simplexml_loa ...

  5. 【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!

    split 方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separator],[limit])参数:stringObj   必选项.要被分解的 ...

  6. SQL处理数组,字符串转换为数组

    原文转载自:http://hi.baidu.com/gagahjt/item/fd081316450f05028ebde413 一.按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串 ...

  7. SQL字符串转换为数组

    /*一.按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果. -----rtrim(@str)去掉 @str右边的字符 ltrim(@ ...

  8. [Shell] 分隔字符串为数组

    #!/bin/bash tmp="test,girl,boy,love" OLD_IFS="$IFS" IFS="," arr=($a) I ...

  9. eval()将json 字符串转换为数组

    json ={ GW:[{id:"655",mc:"董事"},{id:"656",mc:"书记"},{id:" ...

随机推荐

  1. OAuth2.0授权

    一.什么是OAuth2.0官方网站:http://oauth.net/ http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secu ...

  2. 《Android深度探索HAL与驱动开发》第二章阅读心得

    按照书中所讲的步骤,第一步先准备好搭建Android开发环境所需要的工具:JDK6或以上版本:Eclipse3.4或以上版本:ADT:CDT:Android SDK:Android NDK;交叉编译环 ...

  3. C++转义字符

    R"()"括号中间的字符串可以去掉转义字符

  4. sleep和wait的区别?

    sleep指线程被调用时,占着CPU不工作,形象地说明为"占着CPU睡觉",此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制.wait指线程处于进入等待状态,形象 ...

  5. Linux 下如何安装软件

    一.解析Linux应用软件安装包 通常Linux应用软件的安装包有三种: 1) tar包,如software-1.2.3-1.tar.gz.它是使用UNIX系统的打包工具tar打包的. 2) rpm包 ...

  6. Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法

    转载:http://mp.weixin.qq.com/s/uWPls0qrqJKHkHfNLmaenQ 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必 ...

  7. DataTable 批量插入SqlServer数据库 使用:SqlBulkCopy

    简单使用: private void UpdateTitle(DataTable dt) { ) { using (SqlBulkCopy sbc = new SqlBulkCopy(SqlHelpe ...

  8. Linux-awk直接修改原文件

    #注意:重定向符号后面的文件名需要加双引号 awk '{print > "file"}' file

  9. VS2010 中 Entity Framework 多数据库并存方法

    选中相应数据库生成的 *.edmx文件,然后在属性中找到“自定义工具命名空间”,为每个EF数据集设置不同的命名空间,这样每个数据库生成的代码就会被隔离在不同的命名空间,即使同名类型也就不会相互影响了.

  10. QGC 支付宝无法异步通知及异步通知常见问题注意事项

    支付宝异步通知参数(notify_url)路径常见问题注意事项: 1.不能是内网或者局域网地址,必须是外网可以访问的.否则无法调用!! 2.地址不能有session拦截,支付宝主动发送,所有sessi ...