將逗號分隔的 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中文網其他相關文章!