在 MySQL 中處理類似「15,151,152,16」這樣的逗號分隔字符串時,SUBSTRING_INDEX() 是最得力的工具。它能依據指定分隔符出現的次數,從左或從右精準截取子串,無需編寫複雜的應用層代碼。
SUBSTRING_INDEX(str, delim, count)
以字符串 '15,151,152,16' 為例:
-- 取第一段(左起第一個逗號之前)
SELECT SUBSTRING_INDEX('15,151,152,16', ',', 1); -- 15
-- 取第二段:先取左起第二個逗號之前,再取其右起第一段
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('15,151,152,16', ',', 2), ',', -1); -- 151
-- 取倒數第二段:先取右起第二個逗號之後,再取其左起第一段
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('15,151,152,16', ',', -2), ',', 1); -- 152
-- 取最後一段(右起第一個逗號之後)
SELECT SUBSTRING_INDEX('15,151,152,16', ',', -1); -- 16
通用模式:SUBSTRING_INDEX(SUBSTRING_INDEX(col, delim, n), delim, -1)
例如字段 xxx 值為 '201207|123|23.5|100|50|',取第 3 段 23.5:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(xxx, '|', 3), '|', -1);
內層函數截取前 3 段,外層函數再從結果右側取第一段,即得到第 3 段內容。
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); -- 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); -- 'mysql.com'
該函數對多字節字符集(如 UTF-8)完全可靠,是處理分隔數據的首選方案。