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

如何將 SQL 中的逗號分隔值分割為多行?

Patricia Arquette
發布: 2025-01-24 04:22:11
原創
129 人瀏覽過

How to Split Comma-Separated Values in SQL into Multiple Rows?

將逗號分隔的 SQL 值轉換為多行

常見的 SQL 任務涉及將單一儲存格的內容拆分為多行。 例如,考慮這個表:

<code class="language-sql">id | name
1  | a,b,c
2  | b</code>
登入後複製

目標是像這樣重組這些數據:

<code class="language-sql">id | name
1  | a
1  | b
1  | c
2  | b</code>
登入後複製

方法 1:利用數字表

一個有效的解決方案利用預先存在的「數字」表(包含整數的順序清單的表)。 下面的查詢示範了這種方法:

<code class="language-sql">SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name
FROM
  numbers
INNER JOIN
  tablename
ON
  CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1
ORDER BY
  id, n</code>
登入後複製

方法二:動態產生數字(無數字表)

如果專用數字表不可用,可以在查詢本身內產生臨時數字序列:

<code class="language-sql">SELECT
  tablename.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name
FROM
  (SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) AS numbers
INNER JOIN
  tablename
ON
  CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1
ORDER BY
  id, n</code>
登入後複製

請記住調整第二種方法中的 UNION ALL 部分,以容納您在 name 列中預期的逗號分隔值的最大數量。 兩種方法都實現相同的結果 - 將逗號分隔的值拆分為單獨的行。

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

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