首頁 >資料庫 >mysql教程 >如何在 MySQL 中將逗號分隔值分割為行?

如何在 MySQL 中將逗號分隔值分割為行?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-14 09:21:11683瀏覽

How to Split Comma-Separated Values into Rows in MySQL?

在 MySQL 中轉換逗號分隔的資料

本指南說明如何有效地將 MySQL 欄位中的逗號分隔值轉換為單獨的行。我們將利用 MySQL 函數和巧妙的技術:

  1. 建立數字序列:首先,產生一個包含整數序列的臨時表(或使用現有的表)。此序列應大於目標列中逗號分隔值的最大數量。 該序列將充當提取單一值的索引。

  2. 利用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 中的資料操作提供乾淨且有效率的解決方案。 請記得將 table1values 替換為您的實際表名和列名。

以上是如何在 MySQL 中將逗號分隔值分割為行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn