在 SQL中將值拆分為多行
資料處理中的一個常見任務是將逗號分隔的字串拆分為多行,如下所示舉例如下請求:
問題:
給定一個包含id 欄位和包含逗號分隔值的name列的表,回傳以下資料格式:
id | name |
---|---|
1 | a |
1 | b |
1 | c |
2 | b |
解決方案:
為了實現這一點,我們可以利用MySQL 的SUBSTRING_INDEX 函數結合一個數字表,此表包含一系列數字,最多可達要拆分的最大欄位數。下面的查詢示範了這種方法:
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
如果建立數字表不可行,我們可以使用以下查詢在查詢本身產生數字序列:
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
示範:
[SQL Fiddle示範](https://www.sqlfiddle.com/#!5/cf4386/1)
以上是如何在 SQL 中將逗號分隔值分割為多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!