如何在Navicat中用SQL批量替换列中特定文本(UID改id)
解决SQL文本替换:将URL参数UID替换为id,保留数字内容
通用高效解决方案(多数数据库适用)
如果仅需把文本中所有UID字符串替换为id,直接使用SQL内置的REPLACE函数即可,该方法性能优异,适合处理20万条量级的批量更新:
UPDATE 你的表名 SET 目标列名 = REPLACE(目标列名, 'UID', 'id');
这条语句会遍历目标列所有内容,将每一处UID替换为id,完全匹配你的需求(例如3PYTW2X?UID=5493139会自动转为3PYTW2X?id=5493139)。
精准替换(避免误改其他位置的UID)
如果列中存在非URL参数格式的UID字符串,可通过正则替换精准匹配?UID=并替换为?id=:
MySQL 8.0+ / MariaDB
UPDATE 你的表名 SET 目标列名 = REGEXP_REPLACE(目标列名, '\\?UID=', '?id=');
SQL Server 2017+
UPDATE 你的表名 SET 目标列名 = REPLACE(目标列名, '?UID=', '?id=');
Oracle 11g+
UPDATE 你的表名 SET 目标列名 = REGEXP_REPLACE(目标列名, '\?UID=', '?id=');
关键注意事项
- 执行更新前必须备份数据,20万条记录的批量操作出错后恢复成本极高。
- 先执行查询验证替换效果,确认无误后再执行更新:
-- MySQL/MariaDB SELECT 目标列名, REPLACE(目标列名, 'UID', 'id') AS 替换后内容 FROM 你的表名 LIMIT 10; -- SQL Server SELECT TOP 10 目标列名, REPLACE(目标列名, 'UID', 'id') AS 替换后内容 FROM 你的表名; -- Oracle SELECT 目标列名, REPLACE(目标列名, 'UID', 'id') AS 替换后内容 FROM 你的表名 WHERE ROWNUM <= 10; - 若数据库支持事务,可先执行更新,验证后再提交,出错直接回滚。
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

