MySQL的REPLACE函数是处理字符串修改的常用内置函数,能够直接对指定字符串中的目标子串进行替换,无需复杂的逻辑判断,在批量数据修正、内容更新等场景中应用非常广泛。

REPLACE函数基础语法
REPLACE函数的语法格式非常简单,包含三个必填参数,具体规则如下:
-- 函数语法 REPLACE(原字符串, 需要被替换的子串, 替换后的新子串)
三个参数的含义分别是:第一个参数是待处理的原始字符串或者字段名;第二个参数是需要被查找并替换的目标子串;第三个参数是用来替换目标子串的新内容。函数执行后会返回替换完成后的新字符串,如果原字符串中不存在目标子串,会直接返回原字符串。
常见使用案例
案例1:直接处理固定字符串
如果只需要对固定的字符串内容进行替换,可以直接将字符串作为第一个参数传入,示例如下:
-- 替换固定字符串中的指定内容
SELECT REPLACE('hello world', 'world', 'MySQL') AS result;
-- 执行结果:hello MySQL
案例2:批量更新表中字段内容
在实际业务中,经常需要批量修改表中某个字段的局部内容,比如用户表的邮箱域名统一更换,假设用户邮箱原来都是@ipipp.com后缀,现在要统一更换为@test.com,表结构如下:
| id | username | |
|---|---|---|
| 1 | 张三 | zhangsan@ipipp.com |
| 2 | 李四 | lisi@ipipp.com |
对应的更新SQL语句如下:
-- 批量更新邮箱域名 UPDATE user_table SET email = REPLACE(email, '@ipipp.com', '@test.com') WHERE email LIKE '%@ipipp.com';
执行后所有匹配的用户邮箱后缀都会完成替换。
案例3:数据清洗场景去重
有时候表中某个字段可能存在重复的无用字符,比如商品描述字段中重复出现了多次无意义的分割符,需要统一清理,假设商品描述字段内容如下:
-- 原始商品描述内容 '新品上市,折扣多多,折扣多多,欢迎选购'
需要把重复的"折扣多多,"替换为一次,可以使用REPLACE函数嵌套处理:
-- 清洗重复内容
SELECT REPLACE('新品上市,折扣多多,折扣多多,欢迎选购', '折扣多多,折扣多多,', '折扣多多,') AS clean_desc;
-- 执行结果:新品上市,折扣多多,欢迎选购
使用注意事项
- REPLACE函数的替换是大小写敏感的,比如原字符串中的子串是"MySQL",目标子串写"mysql"是无法匹配替换的。
- 如果要替换的子串在原字符串中出现多次,REPLACE会替换所有匹配到的子串,不会只替换第一个。
- 对表中大字段使用REPLACE函数进行更新时,建议先加WHERE条件限定范围,避免误操作全表数据。
- 如果替换的新子串为空字符串,相当于直接删除原字符串中的目标子串,示例如下:
-- 删除指定子串
SELECT REPLACE('abc123def', '123', '') AS result;
-- 执行结果:abcdef