开发者社区> 问答> 正文

SQL分割逗号分隔行

我有一列带有可变数量的逗号分隔值:

somethingA,somethingB,somethingC somethingElseA, somethingElseB 我希望结果采用每个值,并创建一行:

somethingA somethingB somethingC somethingElseA somethingElseB 如何在SQL(MySQL)中执行此操作?

(我曾尝试使用谷歌搜索“内爆”和“侧面视图”,但是这些似乎并没有出现相关问题。所有相关的SO问题都在尝试做更复杂的事情)

展开
收起
保持可爱mmm 2020-05-10 22:32:32 460 0
1 条回答
写回答
取消 提交回答
  • 您可以使用纯SQL来做到这一点

    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value FROM table1 t CROSS JOIN ( SELECT a.N + b.N * 10 + 1 n FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b ORDER BY n ) n WHERE n.n <= 1 + (LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', ''))) ORDER BY value 注意:诀窍是利用tally(numbers)表和在这种情况下非常方便的MySQL函数SUBSTRING_INDEX()。如果您进行了大量此类查询(拆分),则可以考虑填充并使用持久化计数表,而不是像本例中那样通过子查询动态生成该表。此示例中的子查询有效地生成了一个从1到100的数字序列,使您可以在源表中每行最多拆分100个定界值。如果您需要更多或更少,则可以轻松进行调整。

    输出:

    somethingA
    somethingB
    somethingC
    其他
    elseElB

    这是SQLFiddle演示

    这就是查询与持久化理货表格的外观

    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value FROM table1 t CROSS JOIN tally n WHERE n.n <= 1 + (LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', ''))) ORDER BY value来源:stack overflow

    2020-05-10 22:32:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载