利用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 ...
随机推荐
- 读取SHP的投影信息
from osgeo import ogr shp_driver = ogr.GetDriverByName('ESRI Shapefile') shp_dataset = shp_driver.Op ...
- <转>关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
转自:http://www.cnblogs.com/cywin888/p/3263027.html 刚接触iOS开发的人难免会对苹果的各种证书.配置文件等不甚了解,可能你按照网上的教程一步一步的成功申 ...
- join()方法
1.现在有T1.T2.T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? package com.mianshi.easy; class JoinDemo implements ...
- wifi强度数据采集器(android)
来源:毕业设计 关键词:wifi数据的采集 SQLite数据库的使用 需求 采集实验室内各坐标处各wifi信号的强度 UI 因为是辅助工具,所以UI写的很简单,如下图 Wifi相关操作 //获取Wif ...
- iOS & Mac JSON To Model
NSString * jsonPath=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Cont ...
- MyCat:取代Cobar数据库中间件
什么是MyCAT?简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的“大数据库集群” 支持事务.ACID.可以替代Mysql的加强版数据库 ? 一个可以视为“Mysql”集群的企业级数据库 ...
- Remote Desktop File Format
转自:http://engrmosaic.uncc.edu/mosaic-anywhere/remote-desktop-file-format The new Terminal Services c ...
- SQL SERVER同步环境新增发布对象时不能生成(sp_MS+表名)同步存储过程
在配置了同步的用户环境(订阅端:请求订阅) 在发布端: 1.企业管理器SSMS—复制—本地发布—发布属性—项目(选中发布对象) 2.在企业管理里—查看快照代理状态(启动) 在订阅服务器: USE [D ...
- 【mysql】数据库使用的一些规范
一.MySQL存在的问题 优化器对复杂SQL支持不好 对SQL标准支持不好 大规模集群方案不成熟,主要指中间件 ID生成器,全局自增ID 异步逻辑复制,数据安全性问题 Online DDL HA方案不 ...
- 高性能MySQL笔记 第5章 创建高性能的索引
索引(index),在MySQL中也被叫做键(key),是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化最有效的手段. 5.1 索引基础 索引的类型 索引是在存储引擎层而 ...