http://blog.csdn.net/mchdba/article/details/53889803

-------------------------------------------------------------------------------

  1. mysql> create table t1(c1 varchar(32),c2 varchar(32));
  2. Query OK, 0 rows affected (0.02 sec)
  3. 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';
  4. Query OK, 3 rows affected (0.02 sec)
  5. Records: 3  Duplicates: 0  Warnings: 0
  6. mysql> select * from t1;
  7. +------+---------------------+
  8. | c1   | c2                  |
  9. +------+---------------------+
  10. | man  | 123,234,567,789     |
  11. | guo  | -12,-87,-09,132     |
  12. | fang | 1024,2387,1209,1032 |
  13. +------+---------------------+
  14. 3 rows in set (0.00 sec)
  15. mysql>

需要达到的效果是,左边变成右边,按照逗号拆分出来,单列变成多行记录,而且保留原来的其它列数据,如下图所示:

#,blog原地址:http://blog.csdn.net/mchdba/article/details/53889803,作者mchdba,谢绝转载

这个复杂的实现,单条的sql或者几条sql无法达到,需要临时表存储中间数据,所以编写存储过程,间接实现,存储过程如下:

  1. DELIMITER $$
  2. USE `test`$$
  3. DROP PROCEDURE IF EXISTS `proc_cur_split_str`$$
  4. USE `test`$$
  5. CREATE PROCEDURE test.proc_cur_split_str()
  6. BEGIN
  7. DECLARE v_c1 VARCHAR(20);
  8. DECLARE v_c2 VARCHAR(60);
  9. DECLARE _done INT DEFAULT 0;
  10. DECLARE cur_strs CURSOR FOR SELECT c1,c2 from test.t1 ;
  11. DECLARE CONTINUE HANDLER FOR NOT FOUND BEGIN SET _done=1; END;
  12. DROP TABLE IF EXISTS test.ZZ_2;
  13. CREATE TABLE test.ZZ_2(C1 VARCHAR(20),CN VARCHAR(60));
  14. OPEN cur_strs;
  15. FETCH cur_strs INTO v_c1, v_c2;
  16. WHILE _done != 1  DO
  17. DROP TABLE IF EXISTS test.ZZ_1;
  18. CREATE TABLE ZZ_1(CN VARCHAR(60));
  19. SET @b=v_c2;
  20. SET @a = CONCAT(CONCAT("insert into test.ZZ_1 values('",REPLACE(@b,',',"'),('")),"')");
  21. -- SELECT @a;
  22. PREPARE stmt1 FROM @a;
  23. EXECUTE stmt1;
  24. -- SELECT v_c1,t.* FROM test.ZZ_1 t;
  25. INSERT INTO ZZ_2 SELECT v_c1,t.* FROM test.ZZ_1 t;
  26. COMMIT;
  27. -- SELECT * FROM test.ZZ_2;
  28. FETCH cur_strs INTO v_c1, v_c2;
  29. END WHILE;
  30. CLOSE cur_strs;
  31. SELECT * FROM test.ZZ_2;
  32. END;
 

执行存储过程,得到执行结果,符合心理预期,单列C1变成多行,并且保留了原来的其它字段c1的数据值,如下所示,

MySQL 5.7.16 字符串拆分 -> 单列变多行记录(转发)的更多相关文章

  1. Excel技巧--单列变多行

    当上图的单列转变成多行时,可以这么做: 1.在第一行输入A2.A3,向右拖拉第一行: 2.第二行按第一行最右顺序,写下A12,再向右拖拉出第二行: 3.选择这两行,再拖拉出一串连续顺序的多行来: 4. ...

  2. 【SQL】sql版Split函数。用于拆分字符串为单列表格

    功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行.可选是否移除空格子串和重复项.市面上类似的函数不算少,但大多都是在循环 ...

  3. 2016/4/5 Ajax ①用户名 密码 登陆 注册 ② 判断用户名是否已存在 ③点击按钮出现民族选项下拉菜单 ④DBDA类 加入Ajaxquery方法 数组变字符串 字符串拆分

    ①登陆   注册    查表匹配    0405Ajax.php   ②判断用户名是否存在 <!DOCTYPE html> <html lang="en"> ...

  4. mysql字符串拆分实现split功能

    转自:https://blog.csdn.net/pjymyself/article/details/81668157有分隔符的字符串拆分题目要求数据库中 num字段值为: 实现的效果:需要将一行数据 ...

  5. Mysql 字符串拆分 OR 一行转多行

    Mysql 字符串拆分 OR 一行转多行 需要了解的的几个mysql 函数: A.substring_index():字符串截取 substring_index(str,delim,count)   ...

  6. UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理

    一.字符编码简介 1. ASCII码 在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(by ...

  7. mycat1.6.5分片(字符串拆分hash)

    https://blog.csdn.net/webnum/article/details/78313525   分片规则:字符串拆分hash 一.conf/schema.xml文件   <?xm ...

  8. SQL2000/2005字符串拆分为列表通用函数

    ------------------------------------------------------------------ --  Author : htl258(Tony) --  Dat ...

  9. mysql根据字符截取字符串(总结)

    mysql根据字符截取字符串(总结) 1.1 前言   为结合自己平常查资料的习惯,我会先给出例子,然后再对相关知识进行详解.该案例使用到的函数为:SUBSTRING_INDEX 1.2 需要实现的实 ...

随机推荐

  1. 【Python】多进程-共享变量(Value、string、list、Array、dict)

    #练习:未使用共享变量 from multiprocessing import Process def f(n, a): n = 3.1415927 for i in range(len(a)): a ...

  2. 2.20 绕过验证码(add_cookie)

    2.20 绕过验证码(add_cookie) 前言验证码这种问题是比较头疼的,对于验证码的处理,不要去想破解方法,这个验证码本来就是为了防止别人自动化登录的.如果你能破解,说明你们公司的验证码吗安全级 ...

  3. make命令回显Makefile执行脚本命令

    /********************************************************************** * make命令回显Makefile执行脚本命令 * 说 ...

  4. Samsung_tiny4412(驱动笔记05)----Makefile,open,read,write,lseek,poll,ioctl,fasync

    /*********************************************************************************** * * Makefile,op ...

  5. 复杂的动态布尔表达式性能评估(2)--Groovy实现

    前言: 规则引擎中, 往往涉及到多个条件构成了复杂布尔表达式的计算. 对于这类布尔表达式, 一是动态可变的(取决于运营人员的设定), 二是其表达式往往很复杂. 如何快速的计算其表达式的值, 该系列文章 ...

  6. 运放积分电路MULTISIM

    有些需要反馈回路

  7. Gym .101933 Nordic Collegiate Programming Contest (NCPC 2018) (寒假gym自训第四场)

    (本套题算是比较温和吧,就是罚时有点高. B .Baby Bites 题意:给出一个婴儿给出的数组,有一些数字听不清楚,让你还原,问它是否是一个从1开始的一次增加的数组. 思路:从左往右依次固定,看是 ...

  8. django -----分页器组件

    分页器组件 本文目录 1 Django的分页器(paginator)简介 2 应用View层 3 模版层 index.html 4 扩展 回到目录 1 Django的分页器(paginator)简介 ...

  9. C# 后台获取API接口数据

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...

  10. 实验吧—Web——WP之 Guess Next Session

    打开链接,他有给出查看原码的按钮,那么我们打开看看 在这个里面,如果GET的值等于session的就会给出flag 那么我们进行抓包改包 在输入框内随意输入一个值然后抓包 将password的值删去, ...