mysql一列拆成多列_mysql和excel中使用拆分符,将一列转多列

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

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

SELECT '100015011,546,100011239,695,6915038369' COL;

849a69322a7b4b51bd2b00926801e3d2.png

接下来,需要将这一列数据以逗号分隔拆分成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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 MySQL 的 SUBSTRING_INDEX 函数来将一列拆分多列。该函数可以基于指定的分隔将字串划分为多个子字串,并且可以选择返回其的某一个子字串。 例如,假设有如下一列数据: ``` id | name ---|--------- 1 | John,Doe 2 | Jane,Smith ``` 我们可以使用 SUBSTRING_INDEX 函数将 name 列拆分两列,分别存储 first_name 和 last_name: ``` SELECT id, SUBSTRING_INDEX(name, ',', 1) AS first_name, SUBSTRING_INDEX(name, ',', -1) AS last_name FROM my_table; ``` 执行上述 SQL 后,我们会得到如下结果: ``` id | first_name | last_name ---|------------|---------- 1 | John | Doe 2 | Jane | Smith ``` 在上述 SQL ,SUBSTRING_INDEX 函数的第一个参数为待划分的字串,第二个参数为分隔,第三个参数为返回的子字串索引。在本例,第二个参数为逗号,表示按照逗号进行划分;第三个参数为 1 和 -1,分别表示返回第一个和最后一个子字串。 ### 回答2: 在MySQL,可以使用多种方法将一列拆分多列。以下是两种常用的方法: 1. 使用SUBSTRING函数和其他字串函数 使用SUBSTRING函数可以从一列的值提取子字串,并将其作为多个列进行显示。例如,如果有一个名为full_name的列,其包含了名字和姓氏,可以使用以下SQL语句将其拆分两个列名为first_name和last_name: ``` SELECT SUBSTRING(full_name, 1, LOCATE(' ', full_name) - 1) AS first_name, SUBSTRING(full_name, LOCATE(' ', full_name) + 1) AS last_name FROM table_name; ``` 这将返回一个结果集,其包含了两列,分别为名字和姓氏。 2. 使用正则表达式和SUBSTRING_INDEX函数 MySQL还提供了SUBSTRING_INDEX函数,可以将字串根据指定的分隔拆分多个子字串,并提取特定位置上的子串。结合正则表达式,可以更灵活地进行拆分。例如,如果有一个名为full_address的列,其包含了街道、城市和州的信息,可以使用以下SQL语句将其拆分三个列名为street、city和state: ``` SELECT REGEXP_SUBSTR(full_address, '^[^,]+') AS street, REGEXP_SUBSTR(SUBSTRING_INDEX(full_address, ',', -2), '[^,]+') AS city, TRIM(SUBSTRING_INDEX(full_address, ',', -1)) AS state FROM table_name; ``` 这将返回一个结果集,其包含了三列,分别为街道、城市和州。 以上是两种常用的方法,可以根据具体情况选择适合的方法将一列拆分多列。 ### 回答3: 在MySQL,如果需要将一列拆分多列,可以通过使用串函数和相应的SQL语句来实现。 首先,我们需要使用串函数将原始列的数值分解多个部分,并将其存储到新的列。比如,如果我们有一个包含日期和时间的列,例如"2022-01-01 12:00:00",我们可以使用函数SUBSTRING将日期和时间分开并保存到两个不同的列。 下面是一个使用SUBSTRING函数的示例: SELECT col1, SUBSTRING(col1, 1, 10) AS date_col, SUBSTRING(col1, 12) AS time_col FROM table_name; 这将返回一个结果集,其包含原始列以及分解后的日期和时间列。 另外,如果原始列的值是由特定的分隔进行分割的,我们还可以使用函数SUBSTRING_INDEX来提取分隔之间的部分,并将其存储到不同的列。 以下是使用SUBSTRING_INDEX函数的示例: SELECT col1, SUBSTRING_INDEX(col1, ',', 1) AS col2, SUBSTRING_INDEX(SUBSTRING_INDEX(col1, ',', 2), ',', -1) AS col3, SUBSTRING_INDEX(SUBSTRING_INDEX(col1, ',', 3), ',', -1) AS col4 FROM table_name; 这将返回一个结果集,其包含原始列以及根据逗号进行分割后的第1、2和3部分。 需要注意的是,拆分列的方式和具体操作取决于列的数据结构和分隔,你需要根据实际情况选择合适的函数和语句来实现列的拆分

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值