在MySQL中,有時我們需要將一行的數據拆分成多行,例如我們需要將一個長字符串以固定長度分行顯示,或者將多個字段的值合并成一個文本字段。
MySQL提供了一個函數GROUP_CONCAT來實現將多個字段合并為一個文本字段,我們可以使用GROUP_CONCAT函數來實現將一行的數據拆分成多行。
SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(GROUP_CONCAT(str SEPARATOR ''), ',', num), ',', -1 ) str FROM (SELECT '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ' str, 5 num) a CROSS JOIN (SELECT 1 num UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) b WHERE num<= 10
上面的SQL語句中,我們首先使用GROUP_CONCAT函數將一行的數據合并成一個字符串。然后使用SUBSTRING_INDEX函數將字符串按照逗號分隔符拆分成多個部分,再按照num參數指定的長度將字符串分段,最后將分段后的字符串重新拼接成多行數據。
需要注意的是,在使用GROUP_CONCAT函數時需要指定SEPARATOR參數來指定分隔符,否則會默認使用逗號作為分隔符。而在使用SUBSTRING_INDEX函數時,需要注意參數的順序和值的取值范圍。
上一篇mysql將一列轉多行
下一篇mysql將兩個表列合并