需求:將 address 欄位中的「中國」字樣移除,並根據地址前綴自動填寫 province_id。
UPDATE `table` SET `address` = REPLACE(`address`, '中國', '');
REPLACE(str, from_str, to_str) 會將所有匹配的 from_str 替換為 to_str,適用於批量清洗髒數據。
UPDATE `table` SET `province_id` = 11 WHERE LEFT(`address`, 2) = '福建';
LEFT(str, len) 取字串左側 len 個字符。此處取前 2 個字符判斷是否為「福建」,匹配則設省份 ID 為 11(需對應省份表主鍵)。
UPDATE `table`
SET
`address` = REPLACE(`address`, '中國', ''),
`province_id` = CASE
WHEN LEFT(`address`, 2) = '福建' THEN 11
WHEN LEFT(`address`, 2) = '廣東' THEN 12
WHEN LEFT(`address`, 2) = '浙江' THEN 13
ELSE 0
END;
LIMIT 或按主鍵範圍分塊),避免長事務鎖表。address 加索引可加速 LEFT() 條件掃描(MySQL 8.0+ 支援函數索引)。SELECT 驗證匹配行數,確認無誤再執行 UPDATE。| 函數 | 用途 | 範例 |
|---|---|---|
| REPLACE() | 字符串全量替換 | REPLACE(col, '舊', '新') |
| LEFT() | 取左側 N 字符 | LEFT(col, 2) |
| RIGHT() | 取右側 N 字符 | RIGHT(col, 4) |
| SUBSTRING() | 任意位置截取 | SUBSTRING(col, 3, 5) |
| LOCATE() | 查找子串位置 | LOCATE('關鍵詞', col) |