SQL中的REPLACE函数是用于替换字符串中指定子串的内置函数,它可以在不改变原数据的情况下,快速完成字符串内容的替换操作,广泛适用于数据清洗、内容修正等场景。

REPLACE函数基础语法
REPLACE函数的通用语法结构如下:
REPLACE(原字符串, 要替换的子串, 替换后的新子串)
三个参数的含义分别为:
- 原字符串:可以是具体的字符串常量,也可以是表中的字段名
- 要替换的子串:需要被替换掉的目标内容
- 替换后的新子串:用来替换目标内容的新字符串,如果传入空字符串则表示删除目标子串
函数执行后会返回替换完成后的新字符串,不会修改原数据本身。
不同数据库中的使用示例
MySQL中的使用
假设有一张用户表user_info,其中email字段存储的用户邮箱后缀需要统一从旧后缀old.com替换为ipipp.com,可以使用如下语句:
-- 查询替换后的结果,不修改原表数据 SELECT id, email, REPLACE(email, 'old.com', 'ipipp.com') AS new_email FROM user_info; -- 更新表中所有数据的邮箱后缀 UPDATE user_info SET email = REPLACE(email, 'old.com', 'ipipp.com') WHERE email LIKE '%old.com%';
SQL Server中的使用
在SQL Server中REPLACE函数语法一致,假设需要删除订单表order_list中order_desc字段里的冗余字符[待处理]:
-- 删除指定子串,替换为空字符串即可 SELECT order_id, order_desc, REPLACE(order_desc, '[待处理]', '') AS clean_desc FROM order_list;
PostgreSQL中的使用
PostgreSQL同样支持REPLACE函数,若需要将文章表article中content字段的旧域名127.0.0.1替换为新域名:
-- 替换内容中的域名 SELECT article_id, REPLACE(content, '127.0.0.1', 'new-domain.com') AS new_content FROM article;
使用注意事项
- REPLACE函数区分大小写,在部分数据库(如MySQL的默认排序规则下)中,
ABC和abc会被视为不同的子串,替换时需要注意大小写匹配问题 - 如果要替换的子串在原字符串中不存在,函数会直接返回原字符串,不会报错
- 替换操作是全局替换,会将原字符串中所有匹配的子串都替换成新子串,无法实现只替换第一次出现的需求,若需要只替换首次出现的内容,需要结合其他字符串函数实现
- 对表中字段执行更新操作时,建议先通过查询语句验证替换结果,确认无误后再执行更新,避免误操作导致数据错误
常见业务场景示例
比如需要将用户提交的地址信息中的全角逗号替换为半角逗号,方便后续数据处理:
-- 全角逗号替换为半角逗号 SELECT user_id, address, REPLACE(address, ',', ',') AS format_address FROM user_address;
再比如需要统计某篇文章中某个关键词出现的次数,可以结合LENGTH函数实现:
-- 计算关键词出现次数
SELECT
article_id,
(LENGTH(content) - LENGTH(REPLACE(content, 'SQL', ''))) / LENGTH('SQL') AS keyword_count
FROM article
WHERE article_id = 1;
注意:上述统计次数的逻辑是先计算原内容长度,再计算替换掉所有目标关键词后的内容长度,两者的差值除以关键词长度,就是关键词出现的次数。