MySQL 5.7.16 字符串拆分 -> 单列变多行记录(转发)
http://blog.csdn.net/mchdba/article/details/53889803
-------------------------------------------------------------------------------
- mysql> create table t1(c1 varchar(32),c2 varchar(32));
- Query OK, 0 rows affected (0.02 sec)
- mysql> INSERT INTO t1 SELECT 'man' c1,'123,234,567,789' c2 UNION ALL SELECT 'guo','-12,-87,-09,132' UNION ALL SELECT 'fang','1024,2387,1209,1032';
- Query OK, 3 rows affected (0.02 sec)
- Records: 3 Duplicates: 0 Warnings: 0
- mysql> select * from t1;
- +------+---------------------+
- | c1 | c2 |
- +------+---------------------+
- | man | 123,234,567,789 |
- | guo | -12,-87,-09,132 |
- | fang | 1024,2387,1209,1032 |
- +------+---------------------+
- 3 rows in set (0.00 sec)
- mysql>
需要达到的效果是,左边变成右边,按照逗号拆分出来,单列变成多行记录,而且保留原来的其它列数据,如下图所示:
#,blog原地址:http://blog.csdn.net/mchdba/article/details/53889803,作者mchdba,谢绝转载
这个复杂的实现,单条的sql或者几条sql无法达到,需要临时表存储中间数据,所以编写存储过程,间接实现,存储过程如下:
- DELIMITER $$
- USE `test`$$
- DROP PROCEDURE IF EXISTS `proc_cur_split_str`$$
- USE `test`$$
- CREATE PROCEDURE test.proc_cur_split_str()
- BEGIN
- DECLARE v_c1 VARCHAR(20);
- DECLARE v_c2 VARCHAR(60);
- DECLARE _done INT DEFAULT 0;
- DECLARE cur_strs CURSOR FOR SELECT c1,c2 from test.t1 ;
- DECLARE CONTINUE HANDLER FOR NOT FOUND BEGIN SET _done=1; END;
- DROP TABLE IF EXISTS test.ZZ_2;
- CREATE TABLE test.ZZ_2(C1 VARCHAR(20),CN VARCHAR(60));
- OPEN cur_strs;
- FETCH cur_strs INTO v_c1, v_c2;
- WHILE _done != 1 DO
- DROP TABLE IF EXISTS test.ZZ_1;
- CREATE TABLE ZZ_1(CN VARCHAR(60));
- SET @b=v_c2;
- SET @a = CONCAT(CONCAT("insert into test.ZZ_1 values('",REPLACE(@b,',',"'),('")),"')");
- -- SELECT @a;
- PREPARE stmt1 FROM @a;
- EXECUTE stmt1;
- -- SELECT v_c1,t.* FROM test.ZZ_1 t;
- INSERT INTO ZZ_2 SELECT v_c1,t.* FROM test.ZZ_1 t;
- COMMIT;
- -- SELECT * FROM test.ZZ_2;
- FETCH cur_strs INTO v_c1, v_c2;
- END WHILE;
- CLOSE cur_strs;
- SELECT * FROM test.ZZ_2;
- END;
执行存储过程,得到执行结果,符合心理预期,单列C1变成多行,并且保留了原来的其它字段c1的数据值,如下所示,
MySQL 5.7.16 字符串拆分 -> 单列变多行记录(转发)的更多相关文章
- Excel技巧--单列变多行
当上图的单列转变成多行时,可以这么做: 1.在第一行输入A2.A3,向右拖拉第一行: 2.第二行按第一行最右顺序,写下A12,再向右拖拉出第二行: 3.选择这两行,再拖拉出一串连续顺序的多行来: 4. ...
- 【SQL】sql版Split函数。用于拆分字符串为单列表格
功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行.可选是否移除空格子串和重复项.市面上类似的函数不算少,但大多都是在循环 ...
- 2016/4/5 Ajax ①用户名 密码 登陆 注册 ② 判断用户名是否已存在 ③点击按钮出现民族选项下拉菜单 ④DBDA类 加入Ajaxquery方法 数组变字符串 字符串拆分
①登陆 注册 查表匹配 0405Ajax.php ②判断用户名是否存在 <!DOCTYPE html> <html lang="en"> ...
- mysql字符串拆分实现split功能
转自:https://blog.csdn.net/pjymyself/article/details/81668157有分隔符的字符串拆分题目要求数据库中 num字段值为: 实现的效果:需要将一行数据 ...
- Mysql 字符串拆分 OR 一行转多行
Mysql 字符串拆分 OR 一行转多行 需要了解的的几个mysql 函数: A.substring_index():字符串截取 substring_index(str,delim,count) ...
- UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理
一.字符编码简介 1. ASCII码 在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(by ...
- mycat1.6.5分片(字符串拆分hash)
https://blog.csdn.net/webnum/article/details/78313525 分片规则:字符串拆分hash 一.conf/schema.xml文件 <?xm ...
- SQL2000/2005字符串拆分为列表通用函数
------------------------------------------------------------------ -- Author : htl258(Tony) -- Dat ...
- mysql根据字符截取字符串(总结)
mysql根据字符截取字符串(总结) 1.1 前言 为结合自己平常查资料的习惯,我会先给出例子,然后再对相关知识进行详解.该案例使用到的函数为:SUBSTRING_INDEX 1.2 需要实现的实 ...
随机推荐
- builtroot 添加git 下载方式
1.buildroot/Config.in 配置default git server eg:config xxxx_GIT_SITE string "git site" defau ...
- GCC内置函数
在C语言写的程序中,有时候没有包含头文件,直接调用一些函数,如printf,也不会报错,因为GCC内置和一些函数.如果包含了头文件,则去第三方库中链接这个函数,不再使用GCC内置的函数.每个编译器的内 ...
- phpStrom--我常用的快捷键
ALT+ ←/→ 切换代码视图,标签切换 ALT+ ↑/↓ 在方法间快速移动定位 ctrl+shift+r 查找 替换 alt+ctrl+l 格式化代码 CTRL+N 查找类 CTRL+W ...
- Python之路,第九篇:Python入门与基础9
python3 集合set 集合set概念 集合是可变的容器:满足数学意义上的定义,求并集交集等 集合内的数据对象都是唯一的(不能重复多次) 集合是无序的存储结构,集合中的数据没有先后关系 集合是相 ...
- camp待补
待修莫对 序列自动机 几何积分 沈阳 M 待删除背包 : 分组背包 K-LIS, K次二分(插到最后stop) 问题转化为LIS bzoj2131 hdu4055 最小线段覆盖环 实时路况 分治+f ...
- iphone上点击div会出现半透明灰色背景以及margin失效
-webkit-tap-highlight-color 这个属性只用于iOS (iPhone和iPad).当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就会出现 ...
- CCF-棋局评估 201803-04(版本 2.0)------(之前写了一个臃肿的1.0版 ,还沾沾自喜 233)
核心 : 博弈搜索树 双方得分互为相反数 dfs (x,y,player): 玩家player下完(x,y)之后的得分最大值 易错: 先判断输赢,再判断平局 待改进: check() 函数写的 ...
- POJ 2456: Aggressive cows(二分,贪心)
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20485 Accepted: 9719 ...
- 2018.4.24 java实现8皇后算法
import java.util.Scanner; public class Nqueens { private boolean verify(int[] arr,int i) { // TODO A ...
- Linux系统安全笔记
Linux系统安全笔记 https://insecure.org/https://sectools.org/SecTools.Org:排名前125的网络安全工具 http://www.ibm.com/ ...