我们经常在使用数据库都是行转列,或列转行,这都比较常见,但是工作中遇到了一个问题,在mysql数据库中存在一个字段,存的是一个全路径,并且各级路径ID以逗号隔开,现在需要用逗号,将一列拆分成多列显示,也就是列转列,需要怎么做呢?

首先,模拟一条数据出来:

SELECT \’100015011,546,100011239,695,6915038369\’ COL;

 接下来,需要将这一列数据以逗号分隔拆分成5列,需要使用SUBSTRING_INDEX函数。先介绍下这个函数的用法:

SUBSTRING_INDEX(str,delim,count)  — str: 被分割的字符串; delim: 分隔符; count: 分割符出现的次数。

cout 为整数标识从左边开始,count为负数从右边开始。

接下来具体实现:

SELECT
B.COL,
SUBSTRING_INDEX( SUBSTRING_INDEX( B.COL, \’,\’, 1 ), \’,\’, – 1 ) one,
SUBSTRING_INDEX( SUBSTRING_INDEX( B.COL, \’,\’, 2 ), \’,\’, – 1 ) two,
SUBSTRING_INDEX( SUBSTRING_INDEX( B.COL, \’,\’, 3 ), \’,\’,- 1 ) three,
SUBSTRING_INDEX( SUBSTRING_INDEX( B.COL, \’,\’, 4 ), \’,\’,- 1 ) four,
SUBSTRING_INDEX( SUBSTRING_INDEX( B.COL, \’,\’, 5 ), \’,\’,- 1 ) five
FROM
( SELECT \’100015011,546,100011239,695,6915038369\’ COL ) B;

查询结果

 

 分析下其中一列拆分逻辑, SUBSTRING_INDEX( SUBSTRING_INDEX( B.COL, \’,\’, 4 ), \’,\’,- 1 ),首先SUBSTRING_INDEX( B.COL, \’,\’, 4 )是从左边开始以逗号截取到第4个字符串为

100015011,546,100011239,695,之后用SUBSTRING_INDEX( SUBSTRING_INDEX( B.COL, \’,\’, 4 ), \’,\’,- 1 ),将第一次截取后的值,从右边开始,截取第一个字符串,就得到了最终结果695.其他列逻辑同理。

 

除了在用sql语句进行拆分列外,还给大家介绍一种方法,借助office excel 来进行分列。

 打开 数据-》分列,到下一步

 选择分隔符,根据实际情况选择,这里用逗号分隔,进入下一步

数据类型默认常规就好,完成

 

 数据就拆分好了。

 

 

 以上是个人工作中遇到的问题及相应的解决方法,希望对小伙伴们有所帮助。

版权声明:本文为huyblog原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/huyblog/p/12195364.html