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


![SQL分割逗号分隔行[重复] SQL分割逗号分隔行[重复]](http://www.mshxw.com/aiimages/31/405121.png)
