在 MySQL 中轉換逗號分隔的資料
本指南說明如何有效地將 MySQL 欄位中的逗號分隔值轉換為單獨的行。我們將利用 MySQL 函數和巧妙的技術:
建立數字序列:首先,產生一個包含整數序列的臨時表(或使用現有的表)。此序列應大於目標列中逗號分隔值的最大數量。 該序列將充當提取單一值的索引。
利用SUBSTRING_INDEX
: SUBSTRING_INDEX
函數是這裡的關鍵。它根據分隔符號和指定的出現次數提取子字串。我們將結合數字序列使用它兩次,以隔離每個值。
這是說明此方法的範例:
<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) AS value FROM table1 t CROSS JOIN (SELECT a.N + b.N * 10 + c.N * 100 AS 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 ,(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) c ) n WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
說明:
SELECT
語句建立一個數字序列(根據資料需求進行調整)。 CROSS JOIN
將此序列與您的表格 (table1
) 結合。 SUBSTRING_INDEX(t.values, ',', n.n)
提取直到第 n 個逗號的子字串。 SUBSTRING_INDEX(..., ',', -1)
然後從上一個結果中提取值到字串末尾。 WHERE
子句確保我們只處理逗號分隔字串範圍內的值。 條件LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) 1
動態計算值的數量。 此方法有效地將逗號分隔值分割為單獨的行,為 MySQL 中的資料操作提供乾淨且有效率的解決方案。 請記得將 table1
和 values
替換為您的實際表名和列名。
以上是如何在 MySQL 中將逗號分隔值分割為行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!