首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将逗号分隔的列数据拆分为Mysql中的其他列?

问将逗号分隔的列数据拆分为Mysql中的其他列?
EN

Stack Overflow用户
提问于 2022-04-01 15:04:10
回答 2查看 178关注 0票数 1

我在一列中有逗号分隔的数据:

代码语言:javascript
复制
Column 
------- 
a,b,c,d, n etc

我希望将逗号分隔的数据分割成多个列,以获得以下输出:

代码语言:javascript
复制
Column1  Column2 Column3 Column4 ColumnN 
-------  ------- ------- ------- -------
a        b       c       d       n

如何才能做到这一点?

使用Mysql 5.6.17

EN

回答 2

Stack Overflow用户

发布于 2022-04-01 15:19:22

您可以编写自己的拆分函数来实现这一点。

代码语言:javascript
复制
CREATE FUNCTION SPLIT_STR( x VARCHAR(255), delim VARCHAR(12), pos INT )
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),delim, '');

Use可能像这样,第二个参数决定要从字符串中检索哪个位置的值。

代码语言:javascript
复制
SELECT
 SPLIT_STR(Column,',',1) AS a,
 SPLIT_STR(Column,',',2) AS b,
 SPLIT_STR(Column,',',3) AS c,
 SPLIT_STR(Column,',',4) AS d
票数 1
EN

Stack Overflow用户

发布于 2022-04-01 16:35:07

您还可以使用这样的查询:

代码语言:javascript
复制
WITH RECURSIVE cte_count (n,m) 
AS (
      SELECT 1,3
      UNION ALL
      SELECT n + 1,n*n 
      FROM cte_count 
      WHERE n < 100
    )
SELECT TRIM( BOTH FROM SUBSTRING_INDEX( SUBSTRING_INDEX(mycol, ',', n) ,',',-1) )AS single
FROM myTable m
JOIN cte_count cnt
WHERE
cnt.n <= LENGTH(mycol) -LENGTH(REPLACE(m.mycol,',','')) +1

样本

代码语言:javascript
复制
MariaDB [test]> select * from myTable;
+----+----------------------------+
| id | mycol                      |
+----+----------------------------+
|  1 | a,b,c,d                    |
|  2 | Peter,Paul,Mary,john,David |
|  3 | one                        |
|  4 | one, two , three           |
+----+----------------------------+
4 rows in set (0.001 sec)

MariaDB [test]> WITH RECURSIVE cte_count (n,m) 
    -> AS (
    ->       SELECT 1,3
    ->       UNION ALL
    ->       SELECT n + 1,n*n 
    ->       FROM cte_count 
    ->       WHERE n < 100
    ->     )
    -> SELECT TRIM( BOTH FROM SUBSTRING_INDEX( SUBSTRING_INDEX(mycol, ',', n) ,',',-1) )AS single
    -> FROM myTable m
    -> JOIN cte_count cnt
    -> WHERE
    -> cnt.n <= LENGTH(mycol) -LENGTH(REPLACE(m.mycol,',','')) +1
    -> ;
+--------+
| single |
+--------+
| a      |
| b      |
| c      |
| d      |
| Peter  |
| Paul   |
| Mary   |
| john   |
| David  |
| one    |
| one    |
| two    |
| three  |
+--------+
13 rows in set (0.004 sec)

MariaDB [test]> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71709037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档