在資料庫操作中,經常需要將一個欄位的字串拆分後重新組合,或是寫入至其他欄位。MySQL 提供了 SUBSTRING_INDEX 與 CONCAT 兩個強大的字串函數,搭配使用即可輕鬆完成分割與拼接任務。本文將透過實際電話號碼拆分案例,詳細示範其用法。
delim 切割字串,count 為正數時從左側取第 count 個分隔符前的內容;為負數時從右側取第 |count| 個分隔符後的內容。NULL 則回傳 NULL。假設 tb_user 表中 phone 欄位儲存格式為 區碼-總機號碼-分機(例:010-88888882-5612),需將其拆分為「總機」與「分機」兩欄。
SELECT
SUBSTRING_INDEX(phone, '-', 2) AS PNumber, -- 取前兩段:010-88888882
SUBSTRING_INDEX(phone, '-', -1) AS Ext, -- 取最後一段:5612
phone
FROM tb_user
WHERE ucid = 271338;
執行結果:
+----------------+------+-------------------+
| PNumber | Ext | phone |
+----------------+------+-------------------+
| 010-88888882 | 5612 | 010-88888882-5612 |
+----------------+------+-------------------+
若需將分機號碼修改為 1234,可結合 CONCAT 重新組合字串:
UPDATE tb_user
SET phone = CONCAT(SUBSTRING_INDEX(phone, '-', 2), '-', '1234')
WHERE ucid = 271338;
執行後,該筆資料的 phone 將變為 010-88888882-1234。
SUBSTRING_INDEX 靈活的正負計數特性,配合 CONCAT 的拼接能力,能高效處理各類固定格式的字串拆分與重組需求,是 MySQL 字串操作中的經典組合。