在 SQL 中拆分逗号分隔的行
问题:
如何在 SQL(MySQL)中将包含逗号分隔值的列拆分成单独的行?
解答:
MySQL 没有提供用于拆分逗号分隔行值的内置函数。但是,您可以使用一种非常规方法来实现此目的,该方法涉及计数数字和 MySQL 的 SUBSTRING_INDEX() 函数:
<code class="language-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 <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
此查询使用 SUBSTRING_INDEX() 函数通过指定逗号作为分隔符和 n 值作为拆分位置来提取各个值。计数数字是使用子查询生成的,该子查询创建一系列从 1 到 100 的数字,允许您每行最多拆分 100 个分隔值。
对于持久化计数表方法,请使用以下查询:
<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value FROM table1 t CROSS JOIN tally n WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
如果您需要拆分包含逗号分隔值的大量行,则此方法具有更好的可扩展性。
以上是如何将 MySQL 中的逗号分隔值拆分为单独的行?的详细内容。更多信息请关注PHP中文网其他相关文章!