利用MySQL存储过程分割字符串
(转)http://tec.5lulu.com/detail/104krn1e6p2w78d77.html
现有一段字符串,如apple,banana,orange,pears,grape,要把它按照逗号(,)分割成:
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;
运行结果如下,说明分割成功:
select * from tmp_split;
Query OK, 1 row affected
+--------+
| status |
+--------+
| apple |
| banana |
| orange |
| pears |
| grape |
+--------+
5 rows in set
3、应用where in()查询
- # 先传入字符串,分割后保存在临时表tmp_split中
- call splitString("apple,banana,orange,pears,grape",",");
- # 将查询的结果作为其他查询的条件来使用
- select * from fruit where in(select * from tmp_split);
利用MySQL存储过程分割字符串的更多相关文章
- 利用Mysql提供的字符串方法查找字符串中某字符出现的次数
有这么一个需求,查出分类中没有子分类的一级分类,脑海中首次出现的解决思路和这样的 先使用PHP查出所有的一级分类 递归查询一级分类是否有子分类 将没有子分类的一级分类汇总 但觉的这样处理太麻烦了,然后 ...
- Java开发笔记(三十七)利用正则串分割字符串
前面介绍了处理字符串的常用方法,还有一种分割字符串的场景也很常见,也就是按照某个规则将字符串切割为若干子串.分割规则通常是指定某个分隔符,根据字符串内部的分隔符将字符串进行分割,例如逗号.空格等等都可 ...
- mysql 存储过程 CONCAT 字符串拼接
mysql 存储过程 CREATE PROCEDURE pro_province_report (IN startDate VARCHAR(),IN endDate VARCHAR(),IN Sour ...
- mysql存储过程中字符串参数单引号
注意:存储过程中单引号 ,四个单引号 SET @sql = CONCAT('select user_id into ',m_user_id,' from go_user where mobile = ...
- 利用MySQL存储过程批量插入100W条测试数据
DROP PROCEDURE IF EXISTS insert_batch; CREATE PROCEDURE insert_batch() BEGIN ; loopname:LOOP '); ; T ...
- php 逗号 explode分割字符串 或 implode组装成字符串
php 逗号 分割字符串 介绍两个函数给你 <?php //利用 explode 函数分割字符串到数组 $source = "hello1,hello2,hello3,hello4,h ...
- php和mysql两种不同方式的分割字符串和类型转换
一.sql语句1.分割字符串方法:substring_index(字符串,'分隔符',正数从左数起几位/负数从右数起几位); 例如:subtring_index('aa_bb_cc_dd','_',1 ...
- C#利用substring按指定长度分割字符串
这几天学习分析声音的波形数据,接收到的是十六进制的数据,需要将数据转换成十进制再绘图,这个过程涉及到字符串的分割,正好可以促进自己对C#相关知识的学习.说到分割字符串,我首先想到的是Split,但根据 ...
- 【数据库】MySql分割字符串
上论坛时看到一个骨骼清奇的分割字符串算法. DROP TABLE IF EXISTS Tmp_AreaCode; CREATE TABLE Tmp_AreaCode( string ) )ENGINE ...
随机推荐
- 为 MDS 修改 SharePoint 2013组件
了解如何修改 SharePoint 项目中的组件以在 SharePoint 2013 中利用最少下载策略(MDS). 本文内容 为何修改 SharePoint 组件? 母版页 ASP.NET 页面 ...
- VS 2015打开项目闪退,新建项目提示未将对象引用到实例
因为开发需要,要把开发工具换成visual studio2015,装完之后会有警告“js”安装的问题,打开VS也没有问题, 但是一打开项目就闪退,新建项目也不行,查看应用程序日志,报错提示如下: .N ...
- Windows 上的 Jetty 小工具
做项目经常遇到需要开发Java应用,我喜欢用Jetty进行开发.部署,主要是由于Jetty的轻量级. Jetty 项目主页:http://www.eclipse.org/jetty/, 最新版9.30 ...
- JavaScript学习11 数组排序实例
JavaScript学习11 数组排序实例 数组声明 关于数组对象的声明,以前说过:http://www.cnblogs.com/mengdd/p/3680649.html 数组声明的一种方式: va ...
- Android HTTP实例 发送请求和接收响应
Android HTTP实例 发送请求和接收响应 Android Http连接 实例:发送请求和接收响应 添加权限 首先要在manifest中加上访问网络的权限: <manifest ... & ...
- iOS开发中如何使自定义方法具有XCode插件使用提示
iOS开发中难免要安装一些好用的插件,然而插件在使用时往往只对系统的方法有提示作用,而自己写的方法不能用上插件的便利. 其实还是有办法使插件对自定义的方法有效: 1. 首先知道Xcode的插件安装路径 ...
- php 图片上传 使用微秒做文件名
$m = microtime ();$mtime = explode(' ' ,$m);$mtime1 = $mtime[1];$mtime2 = substr($mtime[0], 2, 6);$p ...
- 手把手教你使用Git
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
- windows,linux,mac生成ssh public key 和 private key
https://help.launchpad.net/YourAccount/CreatingAnSSHKeyPair Creating the key How you create your SSH ...
- ios UIScrollView 中控件自动增加间隔
设置 self.automaticallyAdjustsScrollViewInsets=FALSE; 去除自动间隔功能