MySQL单SQL语句清理表中格式错误的邮箱地址
解决方案:MySQL提取<>内的邮箱地址并批量更新
这问题我之前帮同事处理过,用户从邮件客户端或其他工具复制粘贴带显示名的邮箱格式确实很常见,纯MySQL可以通过字符串函数组合精准提取目标内容,直接给你可用的完整方案:
最终UPDATE语句
UPDATE `table` SET email = SUBSTRING(email, LOCATE('<', email) + 1, LOCATE('>', email) - LOCATE('<', email) - 1) WHERE email LIKE '%<%>%';
函数逻辑拆解
我来拆解下每个函数的作用,方便你理解和调整:
LOCATE('<', email):定位左尖括号<在原字符串中的位置LOCATE('>', email):定位右尖括号>的位置SUBSTRING(原字符串, 起始位置, 截取长度):- 起始位置设为
LOCATE('<', email) + 1,跳过左尖括号本身 - 截取长度用
LOCATE('>', email) - LOCATE('<', email) - 1计算,刚好是左右括号之间的字符数(减去两个括号的占位)
- 起始位置设为
重要提醒:先验证再更新
为了避免误操作,强烈建议先执行SELECT语句验证提取结果是否正确,确认没问题后再执行UPDATE:
SELECT email AS original_email, SUBSTRING(email, LOCATE('<', email) + 1, LOCATE('>', email) - LOCATE('<', email) - 1) AS cleaned_email FROM `table` WHERE email LIKE '%<%>%';
特殊场景说明
如果你的数据里存在多对尖括号的极端情况,这个逻辑会提取第一对尖括号之间的内容。不过根据你描述的场景(用户复制粘贴的邮箱格式),大部分都是单对尖括号的情况,这个方案完全适用。
内容的提问来源于stack exchange,提问作者stUrb
相关产品推荐
相关产品推荐

