業務常需對字段批量加前綴(如商品名統一加「新中式」)、加後綴、或全量替換特定子串。MySQL CONCAT() 拼接、REPLACE() 全量替換、SUBSTRING()/RIGHT()/LEFT() 截取,組合即可覆蓋 99% 字串重寫場景。本文給出生產級 SQL 模板與避坑指南。
| 函數 | 語法 | 說明 |
|---|---|---|
| CONCAT | CONCAT(str1, str2, ...) | 拼接,任一參數為 NULL 結果為 NULL(用 CONCAT_WS 或 IFNULL 規避) |
| REPLACE | REPLACE(str, from_str, to_str) | 將 str 中**所有** from_str 替換為 to_str,區分大小寫取決於排序規則 |
| SUBSTRING | SUBSTRING(str, pos, len) | 1-based 位置截取 |
| LEFT/RIGHT | LEFT(str, len) / RIGHT(str, len) | 左/右側定長截取 |
| LENGTH/CHAR_LENGTH | LENGTH(str) 字節長 / CHAR_LENGTH(str) 字符長 | 多字節字符集必分清 |
UPDATE `table_name`
SET `col_name` = CONCAT('prefix_', `col_name`)
WHERE `condition_col` = 'target_value';
實例: UPDATE ecs_goods SET goods_name = CONCAT('新中式', goods_name) WHERE cat_id = 4;
UPDATE `table_name` SET `col_name` = CONCAT(`col_name`, '_suffix') WHERE `condition_col` = 'target_value';
實例: UPDATE ecs_goods SET goods_name = CONCAT(goods_name, '新中式') WHERE cat_id = 4;
UPDATE `table_name` SET `col_name` = REPLACE(`col_name`, 'old_substr', 'new_substr') WHERE `col_name` LIKE '%old_substr%'; -- 可選 WHERE 減少無意義更新
-- 刪除首字符(如去掉首個分隔符) UPDATE `table` SET `col` = SUBSTRING(`col`, 2) WHERE `col` LIKE '/%'; -- 刪除前 N 字符 UPDATE `table` SET `col` = SUBSTRING(`col`, N+1); -- 保留後 N 字符 UPDATE `table` SET `col` = RIGHT(`col`, N);
mysqldump -d -t table_name > backup.sql(僅結構)或全量備份。SELECT col, CONCAT('prefix', col) AS new_col FROM table WHERE ... LIMIT 10; 確認結果符合預期。WHERE id BETWEEN x AND y,每批 LIMIT 5000,間隔 SLEEP(1)。START TRANSACTION; ... COMMIT; 確保原子性,必要時 ROLLBACK。CONCAT 遇 NULL 全變 NULL → 用 CONCAT('prefix', IFNULL(col,'')) 或 CONCAT_WS('', 'prefix', col)。REPLACE 替換所有匹配,若只想替首次出現 → 需用 INSERT(str, LOCATE(substr,str), CHAR_LENGTH(substr), new_str)。utf8mb4。字串批量重寫看似簡單,實則考驗「備份、驗證、分批、可回滾」的工程化素養。收藏上述模板,按清單執行,讓每一次 UPDATE 都穩如磐石。