You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何在字符串中间插入字符?以邮箱添加+号为例

批量修改邮箱格式的SQL方案

针对users表中类似TestMail20000@gmail.com格式的邮箱,需要在字母与数字之间添加+符号,不同数据库的实现方案如下:

MySQL(8.0及以上版本)

使用REGEXP_REPLACE正则替换函数,精准匹配字母后接数字的位置并插入+:

-- 先验证修改结果(务必先执行此步骤确认)
SELECT email, REGEXP_REPLACE(email, '([a-zA-Z])([0-9])', '\\1+\\2') AS new_email
FROM users
WHERE email REGEXP '[a-zA-Z][0-9]@';

-- 确认无误后执行更新
UPDATE users
SET email = REGEXP_REPLACE(email, '([a-zA-Z])([0-9])', '\\1+\\2')
WHERE email REGEXP '[a-zA-Z][0-9]@';

说明:WHERE条件过滤出符合字母接数字后带@的邮箱,避免误改其他格式的邮箱。

PostgreSQL

同样使用REGEXP_REPLACE函数,语法略有差异:

-- 先验证修改结果
SELECT email, REGEXP_REPLACE(email, '([a-zA-Z])([0-9])', '\1+\2', 'g') AS new_email
FROM users
WHERE email ~ '[a-zA-Z][0-9]@';

-- 执行更新
UPDATE users
SET email = REGEXP_REPLACE(email, '([a-zA-Z])([0-9])', '\1+\2', 'g')
WHERE email ~ '[a-zA-Z][0-9]@';

说明:'g'参数表示全局替换,若邮箱存在多处字母接数字的情况也能处理。

SQL Server

2017及以上版本(支持正则)

-- 先验证修改结果
SELECT email, REGEXP_REPLACE(email, '([a-zA-Z])([0-9])', '$1+$2') AS new_email
FROM users
WHERE email LIKE '%[a-zA-Z][0-9]@%';

-- 执行更新
UPDATE users
SET email = REGEXP_REPLACE(email, '([a-zA-Z])([0-9])', '$1+$2')
WHERE email LIKE '%[a-zA-Z][0-9]@%';

旧版本(不支持正则)

使用PATINDEX定位位置,结合STUFF插入+:

-- 先验证修改结果
SELECT email, STUFF(email, PATINDEX('%[a-zA-Z][0-9]@%', email) + 1, 0, '+') AS new_email
FROM users
WHERE PATINDEX('%[a-zA-Z][0-9]@%', email) > 0;

-- 执行更新
UPDATE users
SET email = STUFF(email, PATINDEX('%[a-zA-Z][0-9]@%', email) + 1, 0, '+')
WHERE PATINDEX('%[a-zA-Z][0-9]@%', email) > 0;

重要提醒

执行更新前必须备份数据,并先运行SELECT语句验证修改结果,确认无误后再执行UPDATE操作,避免数据错误。

内容的提问来源于stack exchange,提问作者ray.one

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:15:40