Oracle大表指定列大写值转小写的批量更新方案问询
批量修正表中指定列的大小写问题
针对你提到的test表中column1列存在大写数据需要转为小写的需求,以下是不同数据库下的高效解决方案,避免全表更新浪费性能:
MySQL/MariaDB
直接使用LOWER()函数转换,同时通过WHERE条件只筛选原本为大写的行(避免更新已经是小写的行):
UPDATE test SET column1 = LOWER(column1) WHERE column1 = UPPER(column1);
PostgreSQL
同样用LOWER()函数,WHERE条件可以匹配全大写的字符串:
UPDATE test SET column1 = LOWER(column1) WHERE column1 ~ '^[A-Z]+$';
或者用大小写匹配的方式:
UPDATE test SET column1 = LOWER(column1) WHERE column1 = UPPER(column1);
SQL Server
使用LOWER()函数,注意如果数据库默认排序规则不区分大小写,需要指定区分大小写的排序规则来筛选大写行:
UPDATE test SET column1 = LOWER(column1) WHERE column1 COLLATE SQL_Latin1_General_CP1_CS_AS = UPPER(column1);
注意事项
- 执行更新前务必先备份数据,或者先运行对应的SELECT语句验证效果:
比如MySQL下先执行:SELECT * FROM test WHERE column1 = UPPER(column1);,确认要更新的行是否正确。 - 如果数据量极大,建议分批更新,避免长时间锁表。比如MySQL可以每次更新1000行:
重复执行直到没有行被更新为止。UPDATE test SET column1 = LOWER(column1) WHERE column1 = UPPER(column1) LIMIT 1000;
内容的提问来源于stack exchange,提问作者AMBIKA SEKAR
相关产品推荐
相关产品推荐

