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

SQL分割逗号分隔行[重复],第1张

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 演示



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5014549.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-15
下一篇2022-11-15

发表评论

登录后才能评论

评论列表(0条)

    保存