添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我们经常在使用数据库都是行转列,或列转行,这都比较常见,但是工作中遇到了一个问题,在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 来进行分列。

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

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

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

数据就拆分好了。

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