在 SQL 中分割逗號分隔的行值
在資料庫管理中,經常會遇到儲存為逗號分隔值 (CSV) 的資料。但是,出於某些分析或報告目的,可能需要將這些 CSV 拆分為單獨的行。在本文中,我們將探討一種基於 SQL 的方法來執行此分割操作。
解決方案涉及利用 MySQL 中的 SUBSTRING_INDEX() 函數。此函數允許我們根據分隔符號字元從指定字串中提取子字串。我們還使用與計數表的交叉連接來產生一系列數字,這些數字用作拆分 CSV 的行索引。
以下是 SQL 查詢:
<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>
此查詢有效地拆分了 table1
表中 values
列的 CSV 值,並為每個值建立新行。計數表允許拆分單行中的多個值。
範例資料與輸出:
考慮 table1
表中的以下數據:
values |
---|
somethingA,somethingB,somethingC |
somethingElseA, somethingElseB |
將查詢套用至此資料將產生以下輸出:
value |
---|
somethingA |
somethingB |
somethingC |
somethingElseA |
somethingElseB |
透過利用此技術,可以方便地將以 CSV 格式儲存的資料拆分為各個行,從而可以進行進一步的分析或處理。
以上是如何將 SQL 中的逗號分隔值分割為單獨的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!