MySQL 中有時需要將一行字符串中的多個值分隔開并轉換成多行的形式,這個過程我們稱之為字符串分隔行轉列。下面是一些實現的方法。
1.使用 SUBSTRING_INDEX() 函數
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX('a,b,c,d', ',', n), ',', -1)) value FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) m WHERE TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX('a,b,c,d', ',', n), ',', -1)) != '';
2.使用 UNION ALL 實現
SELECT 'a' value UNION ALL SELECT 'b' value UNION ALL SELECT 'c' value UNION ALL SELECT 'd' value;
3.使用正則表達式實現
SELECT TRIM(SUBSTRING_INDEX(val, ',', 1)) value FROM (SELECT REGEXP_SUBSTR('a,b,c,d', CONCAT('[^,]+', REPEAT(',[^,]+', n-1))) val FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) m ) p WHERE val IS NOT NULL;
以上是三種方法,大家可以根據自己的需要,選擇適合自己的方法實現字符串分隔行轉列。