mysql和excel中使用拆分符,将一列转多列
我们经常在使用数据库都是行转列,或列转行,这都比较常见,但是工作中遇到了一个问题,在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 来进行分列。
打开 数据-》分列,到下一步
选择分隔符,根据实际情况选择,这里用逗号分隔,进入下一步
数据类型默认常规就好,完成
数据就拆分好了。
以上是个人工作中遇到的问题及相应的解决方法,希望对小伙伴们有所帮助。