MySQL 字符串替换实战指南:2 个函数搞定 90% 业务需求

MySQL 字符串替换实战指南:2 个函数搞定 90% 业务需求

    正在检查是否收录...

前言:为什么你需要这篇教程?

在日常开发 / 运维中,你是否遇到过这些场景:

  • 电商系统需要批量替换商品详情中的旧域名(如从http://old.com改成https://new.com);
  • 用户表中手机号格式不统一,需在指定位置插入分隔符(如将13800138000改成138-0013-8000);
  • 日志数据中敏感字符需部分遮挡(如将12345678901改成123****8901);

无需依赖 Python、PHP 等外部脚本,MySQL 自带的 2 个核心函数就能快速解决!本文手把手教你用REPLACE()和INSERT()实现高效字符串替换

一、操作环境说明

  • 系统兼容

    :Windows 7/10/11、Linux(CentOS/Ubuntu)、macOS
  • MySQL 版本

    :5.7/8.0/8.4(全版本支持,无兼容性问题)
  • 适用终端

    :Navicat、MySQL Workbench、命令行(CMD/SSH)
  • 硬件要求

    :无特殊配置,普通办公电脑 / 服务器均可运行

二、核心函数 1:REPLACE ()—— 全局批量替换

1. 函数定位

适用于「全局替换某字符串中所有匹配的子串」,比如批量修改 URL、统一字段格式,执行效率高,支持结合UPDATE批量操作表数据。

2. 完整语法与参数解析

 

语法格式

REPLACE(string, from_string, new_string)

参数

说明

string

必选,原始字符串 / 字段名(如表中的path字段)

from_string

必选,需要被替换的子串(区分大小写!)

new_string

必选,用于替换的新子串(若为空则删除from_string)

3. 实战案例(含业务场景)

案例 1:基础字符串替换

需求:将测试字符串aaa.mysql.com中的所有a替换为w

 

SELECT REPLACE('aaa.mysql.com', 'a', 'w') AS 替换结果;

执行结果

 

替换结果

www.mysql.com

案例 2:批量更新表数据(高频业务场景)

需求:某电商表goods的detail_url字段,需将所有http://old-shop.com替换为https://new-shop.com

 

-- 先查询验证替换效果(避免误操作)

SELECT detail_url, REPLACE(detail_url, 'http://old-shop.com', 'https://new-shop.com') AS 新URL

FROM goods LIMIT 10;

-- 确认无误后执行批量更新

UPDATE goods

SET detail_url = REPLACE(detail_url, 'http://old-shop.com', 'https://new-shop.com')

-- 可选:添加条件过滤,避免全表更新

WHERE detail_url LIKE 'http://old-shop.com%';

价值

:1 行 SQL 搞定 thousands 条数据,无需手动修改,节省 1 小时 + 工时。

4. 注意事项

  • 区分大小写:REPLACE('MySQL', 'm', 'M')不会替换MySQL中的M(因小写m不匹配);
  • 空值处理:若from_string为空,返回原始字符串;若new_string为空,会删除from_string(如REPLACE('abc123', '123', '')返回abc)。

三、核心函数 2:INSERT ()—— 指定位置精准替换

1. 函数定位

适用于「在字符串指定位置插入 / 替换固定长度的子串」,比如修改编码格式、添加分隔符、部分字符遮挡,精准控制替换范围。

2. 完整语法与参数解析

 

语法格式

INSERT(string, position, number, string2)

参数

说明

string

必选,待修改的原始字符串 / 字段名

position

必选,开始替换的位置(正数:从左数;负数 / 0:返回原始字符串)

number

必选,需要被替换的字符长度(超出原字符串长度则替换剩余所有字符)

string2

必选,用于替换的新子串(若为 NULL 则返回 NULL)

3. 实战案例(覆盖多场景)

案例 1:基础位置替换

需求:将Football从第 2 个字符开始,替换 4 个字符为Play

 

SELECT INSERT('Football', 2, 4, 'Play') AS 替换结果;

执行结果

:FPlayall(原字符串F+ 新子串Play+ 剩余字符all)

案例 2:特殊场景处理(位置超界 / 长度超界)

 

SELECT

  -- 场景1:开始位置为-1(超界,返回原字符串)

  INSERT('Football', -1, 4, 'Play') AS 位置超界,

  -- 场景2:替换长度20(超原字符串长度,替换剩余所有字符)

  INSERT('Football', 3, 20, 'Play') AS 长度超界;

执行结果

 

位置超界

长度超界

Football

FoPlay

案例 3:业务场景 —— 手机号部分遮挡

需求:将用户表user中phone字段的中间 4 位替换为****(如13800138000→138****8000)

 

UPDATE user

SET phone = INSERT(phone, 4, 4, '****')

WHERE phone REGEXP '^1[3-9][0-9]{9}$'; -- 确保手机号格式正确

价值

:无需写复杂正则,1 行 SQL 实现敏感信息脱敏,符合数据安全规范。

四、常见问题解答(FAQ)

  1. Q:REPLACE () 替换不生效?

A:检查是否区分大小写(如replace('MySQL', 'mysql', 'xxx')因大小写不匹配无法替换),或from_string存在空格 / 特殊字符(建议用TRIM()先清理)。

  1. Q:INSERT () 的位置参数怎么确定?

A:从左数第 1 个字符为位置 1(非 0),若需从末尾计算,可结合LENGTH()函数(如INSERT(str, LENGTH(str)-3, 3, '***')替换最后 3 位)。

  1. Q:能否同时使用两个函数?

A:可以!例如先全局替换再精准调整:

 

SELECT INSERT(REPLACE('aaa.mysql.com', 'a', 'w'), 5, 5, 'sql8') AS 组合结果;

-- 结果:www.sql8.com

五、总结:选择哪个函数?

 

需求场景

推荐函数

优势

全局批量替换(如改域名)

REPLACE()

效率高,支持批量更新

指定位置 / 长度替换

INSERT()

精准控制,适合格式调整

敏感信息脱敏(如手机号)

INSERT()

无需正则,操作简单

立即行动

:打开你的 MySQL 终端,复制文中案例实操 10 分钟,就能掌握 90% 的字符串替换需求!如果遇到特殊场景,欢迎在评论区留言,获取定制化解决方案~

 

  • 本文作者:WAP站长网
  • 本文链接: https://wapzz.net/post-27873.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.8W+
9
1
2
WAP站长官方

教你如何用GPT

上一篇

Redis 介绍与 Node.js 使用教程

下一篇
评论区
内容为空

这一切,似未曾拥有

  • 复制图片
按住ctrl可打开默认菜单