首頁 > 資料庫 > mysql教程 > 如何反轉 MySQL 的 GROUP_CONCAT:將連接的字串拆分為單獨的值?

如何反轉 MySQL 的 GROUP_CONCAT:將連接的字串拆分為單獨的值?

Barbara Streisand
發布: 2024-12-16 22:05:14
原創
520 人瀏覽過

How to Reverse MySQL's GROUP_CONCAT: Splitting a Concatenated String into Individual Values?

解開MySQL 中GROUP_CONCAT 逆運算的謎團

在資料操作領域,GROUP_CONCAT 函數在將多個值連接成一個值方面佔據統治地位。單字串。然而,將連接的字串拆分為單一值的逆操作提出了挑戰。

手頭上的問題

考慮一個場景,其中您有一個表“顏色” 「資料結構如下:

+----+----------------------+
| id | colors               |
+----+----------------------+
| 1  | Red,Green,Blue       |
| 2  | Orangered,Periwinkle |
+----+----------------------+
登入後複製

您的目標是將這些資料轉換為更細緻的資料格式:

+----+------------+
| id | colors     |
+----+------------+
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |
+----+------------+
登入後複製

解決方案:深入SQL

要實現這種資料變形,您可以利用SUBSTRING_INDEX函數的強大功能。 「id」列並使用兩個巢狀的SUBSTRING_INDEX 函數來隔離所需的子字串。個逗號之前的子字串,而第二次呼叫則提取第(n.digit 1) 個逗號之後到字串末尾的子字串。套用於最多4 個子字串,如中的「digit」列所定義子查詢。子句按「id」對結果排序,然後按每行的子字串的數字順序對結果進行排序。實際演示,請訪問參考中鏈接的小提琴提供。

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

[從逗號分隔清單中提取多個值](https://www.data-generator.com/fiddle/d3c78f201137b4b56a63a95332b8106b)

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板