利用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 ...
随机推荐
- 导入CSV格式的数据
导入CSV格式的数据 (参见http://dev.mysql.com/doc/refman/5.6/en/load-data.html) 1.数据库表(st_pptn_r) CREATE TABLE ...
- [转]MOSS通过此命令注册模板,web应用程序可以根据stp模块生成网站集
注:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\bin stsadm –o add ...
- ubuntu下cacti安装配置
参考文献 http://kling.blog.51cto.com/3320545/1180778 前言: 原本是想源码安装的,但是现在发现还是太麻烦了,就直接通过apt-get install安装了. ...
- Android 项目实战--手机卫士(实现splash)
从今天开始根据之前学习的android的基础知识,实战一下,实现一个简单功能的android手机卫士 本文地址:http://www.cnblogs.com/wuyudong/p/5899283.ht ...
- Android每次运行项目时重新启动一个新的模拟器的解决办法
具体解决办法 1.打开任务管理器,结束adb进程 2.此时android console下面会出现错误信息 3.切换到dos下面运行: adb start-server 4.重新运行android项目 ...
- iOS关于CoreAnimation动画知识总结
一:UIKit动画 在介绍CoreAnimation动画前先简单介绍一下UIKit动画,大部分简单的动画都可以使用UIKit动画实现,如果想实现更复杂的效果,则需要使用Core Animation了: ...
- CYQ.Data 数据框架 使用篇一 入门指南
快速使用帮助 | 回贴(13) | 浏览(11303) | 发表日期 :2010-12-20 20:12:29 #楼主 本文针对V5版本进行修改于(2016-07-04) 下面是使用步骤: 一 ...
- java 把一个文件夹里图片复制到另一个文件夹里
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.ut ...
- InnoDB源码分析--事务日志(二)
原创文章,转载请标明原文链接:http://www.cnblogs.com/wingsless/p/5708992.html 昨天写了有关事务日志的一些基本点(http://www.cnblogs.c ...
- mongoDB删除表中一个字段
使用update命令 update命令 update命令格式: db.collection.update(criteria,objNew,upsert,multi) 参数说明: criteria:查询 ...