首頁 >資料庫 >mysql教程 >如何將 MySQL 中的連接字串拆分為單獨的行?

如何將 MySQL 中的連接字串拆分為單獨的行?

DDD
DDD原創
2024-12-14 03:15:09871瀏覽

How to Split Concatenated Strings in MySQL into Individual Rows?

在MySQL 中拆分串聯字串

使用資料庫表時,您可能會遇到單一列包含多個串聯成單一值的情況細繩。雖然 GROUP_CONCAT 函數擅長將多行組合成單一字串,但其相反的操作(涉及將連接的字串拆分為單獨的行)可能是一個挑戰。此操作通常稱為字串擴展或分解。

問題陳述:

您將看到一個表,其中儲存名為「colors」的列,其中包含逗號 -分隔的顏色清單。您的目標是將表格重組為每行代表一種顏色的格式。

範例表格:

id colors
1 Red,Green,Blue
2 Orangered,Periwinkle

所需表格格式:

id colors
1 Red
1 Green
1 Blue
2 Orangered
2 Periwinkle

解決方案:

要達到預期的結果,您可以使用以下MySQL查詢:

SELECT
  id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit+1), ',', -1) AS color
FROM
  colors
  INNER JOIN
  (SELECT 0 AS digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) AS n
  ON LENGTH(REPLACE(colors, ',', '')) <= LENGTH(colors)-n.digit
ORDER BY
  id,
  n.digit

解釋:

  1. SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit 1), ',', - - 1 ):此表達式用於從連接的字串中提取單一顏色。它首先使用 SUBSTRING_INDEX 提取從第 n 位元逗號後的第一個逗號開始到下一個逗號結束的子字串。然後,它提取從第二個逗號開始到字串末尾結束的子字串。這有效地選擇了單一顏色。
  2. (SELECT 0 AS digital UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3):此子查詢產生從 0 到 3 的數字序列,表示每個顏色的位置連接字串中的顏色。
  3. ON LENGTH(REPLACE(colors, ',', ''))
  4. ORDER BY id, n.digit:這確保結果按id 和顏色中的顏色位置排序

注意: 此查詢假設每行最多包含4 種顏色。如果您的行可以有超過 4 種顏色,您將需要修改子查詢以產生更大的數字序列。

透過實現此查詢,您可以有效地將表中的串聯字串拆分為單獨的行,允許更輕鬆的處理和分析。

以上是如何將 MySQL 中的連接字串拆分為單獨的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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