栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQL分割逗号分隔行[重复]

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL分割逗号分隔行[重复]

您可以使用纯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

这是 SQLFiddle 演示



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405121.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号