mysql根据逗号将一行数据拆分成多行数据
mysql根据逗号将一行数据拆分成多行数据
- 原始数据
- 处理结果展示
- DDL
CREATE TABLE `company` (
`id` int(20) DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`shareholder` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; - DML
INSERT INTO `company` VALUES ('', '阿里巴巴', '马云');
INSERT INTO `company` VALUES ('', '淘宝', '马云,孙正义'); - 三种方式,相同的原理
- 使用MySQL库中的自增序列表
SELECT
a.id,
a. NAME,
substring_index(
substring_index(
a.shareholder,
',',
b.help_topic_id + 1
),
',' ,- 1
) AS shareholder
FROM
company a
JOIN mysql.help_topic b ON b.help_topic_id < (
length(a.shareholder) - length(
REPLACE (a.shareholder, ',', '')
) + 1
) - 自建自增序列表
CREATE TABLE `addself` (
`id` int(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `addself` VALUES ('');
INSERT INTO `addself` VALUES ('');
INSERT INTO `addself` VALUES ('');
INSERT INTO `addself` VALUES ('');
INSERT INTO `addself` VALUES ('');SELECT
a.id,
a.NAME,
substring_index(
substring_index(
a.shareholder,
',',
b.id+ 1
),
',' ,- 1
) AS shareholder
FROM
company a
JOIN addself b ON b.id< (
length(a.shareholder) - length(
REPLACE (a.shareholder, ',', '')
) + 1
) - 以数据库里已有表,构建自增序列表
select a.ID,a.name,substring_index(substring_index(a.shareholder,',',b.id+1),',',-1) shareholder
from
company a
join
(SELECT (@ROW :=@Row + 1) as id FROM xh,(SELECT @Row:=-1) zz) b
on b.id < (length(a.shareholder) - length(replace(a.shareholder,',',''))+1);xh表是库里已有表(可以不是序列表),行数必须大于分割字段的最大逗号数
- 小结
- 序列表必须从0开始,行数与最长逗号有关,行数至少比最长逗号个数加1,可以建0~1000。
- 为什么不用MySQL自带的自增序列表mysql.help_topic?因为好多公司的数据库是没有权限操作这些表的, 不能使用。
- 本文参考了:https://blog.csdn.net/WY18334783911/article/details/83379450 感谢!
希望对大家有所帮助。
mysql根据逗号将一行数据拆分成多行数据的更多相关文章
- Oracle数据库字段数据拆分成多行(REGEXP_SUBSTR函数)
做多选功能时为了简便,会在某个字段中存储多个值,保存时虽然省事,但后续的查询统计时还需要拆分数据才行,因此这时需要将字段内的值分成多行以便后续使用. 下面这个例子实现了字段内数据的拆分: --创建测试 ...
- mysql-一行分隔成多行数据
mysql将某个字段有分隔符号分隔成多行数据 SELECT a.id, a. NAME, substring_index( substring_index( a.name, ',', b.help_t ...
- mssql sqlserver 禁止删除数据表中指定行数据(转自:http://www.maomao365.com/?p=5323)
转自:http://www.maomao365.com/?p=5323 摘要:下文主要讲述,如何禁止删除数据表中指定行数据 最近收到用户一个需求,禁止所有人删除”表A”中,ID 为1.2.3.4.5的 ...
- MYSQL: sql中某一个字段内容为用逗号分割的字符串转换成多条数据
场景: 表名:testsuer id name 1 小红,小李,李红,小法 要结果值为: 1 小红 1 小李 1 李红 1 小法 MYSQL函数解释 ...
- XML转换成TXT行数据的Java程序
ZKe ------------------- XML数据的一个块内的所有属性,转换成TXT文件的一行.众所周知XML文件是通过类似HTML的标签进行数据的定义如图所示 属性由id, article, ...
- notepadd++中,如何根据某个字符将一行内容切割成多行?
背景描述: 今天在做个事情,遇到下面字符,就想将每个词,如cluster,zookeeper都单独的一行 [cluster, activemq, controller, brokers, zookee ...
- Oracle如何以逗号分隔的字符串拆分为多行数据
近期在工作中遇到某表某字段是可扩展数据内容,信息以逗号分隔生成的,现需求要根据此字段数据在其它表查询相关的内容展现出来,第一想法是切割数据,以逗号作为切割符,以下为总结的实现方法,以供大家参考.指教. ...
- oracle单字段拆分成多行
已上图为例 先以逗号分隔拆分 拆分函数: CREATE OR REPLACE FUNCTION SPLIT(P_STRING VARCHAR2, P_SEP VARCHAR2 := ',') RETU ...
- Sql将一列数据拆分为多行显示的两种方法
原始数据与期望结果有表tb, 如下:id value----------- -----------1 aa,bb2 aaa,bbb,ccc欲按 ...
随机推荐
- android网络编程_socket(一)
转载http://www.eoeandroid.com/thread-97477-1-1.html 小知识点:UDP协议和TCP协议的不同.UDP是把数据都打成数据包,数据包上自带通信的地址,但是数据 ...
- Ray-基础部分目录
基础部分: 引言 Actor编写-ESGrain与ESRepGrain 消息发布器与消息存储器 Event编写 Handler之CoreHandler编写 Handler之ToReadHandler编 ...
- JQuery学习笔记(3)——节点操作 节点查找
插入节点 内部插入 所谓的内部插入,就是指在节点里面的插入,而外部插入,则是在节点外面插入. append() prepend() appendTo() prependTo() append和prep ...
- VS2012-SSAS 表格模型安全性
模型安全性与AD域账户结合之后,浏览模型出现的问题: 当对在表“Products”中定义的行级别安全性表达式求值时遇到了错误.错误消息: 当对在表“Products”中定义的行级别安全性表达式求值时遇 ...
- C#3.0新增功能09 LINQ 基础05 使用 LINQ 进行数据转换
连载目录 [已更新最新开发文章,点击查看详细] 语言集成查询 (LINQ) 不只是检索数据. 它也是用于转换数据的强大工具. 通过使用 LINQ查询,可以使用源序列作为输入,并通过多种方式对其进 ...
- cordova把我搞晕了
天啦,搞了几十次,这次求你成功好吗?
- Jenkins-slave分布式环境构建与并行WebUi自动化测试项目
前言 之前搭建过selenium grid的分布式环境,今天我们再来搭建一次Jenkins的分布式环境:jenkins-slave Jenkins的Master-Slave分布式架构主要是为了解决Je ...
- Prometheus 整合 AlertManager
简介 Alertmanager 主要用于接收 Prometheus 发送的告警信息,它很容易做到告警信息的去重,降噪,分组,策略路由,是一款前卫的告警通知系统.它支持丰富的告警通知渠道,可以将告警信息 ...
- shiro 和 spring boot 的集成
1 添加依赖 使用 shiro-spring-boot-web-starter 在 spring boot 中集成 shiro 只需要再添加一个依赖 <dependency> <gr ...
- MD、SHA、MAC消息摘要算法实现与应用
1.消息摘要概述 消息摘要(Message Digest)又称为数字摘要(Digital Digest).它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生 ...