如何批量修改MySQL数据表整列数据为指定字符串格式
MySQL批量转换指定列字符串格式方案
你的数据是固定以下划线分隔的4段结构,直接用MySQL内置的字符串函数即可完成批量转换,不需要额外写脚本处理。
第一步:先执行查询校验转换结果
先把转换后的值查出来核对,避免直接更新出错。把下面语句里的your_table替换成你的实际表名,Testtag替换成你的实际列名:
SELECT Testtag AS original_value, CONCAT( SUBSTRING_INDEX(SUBSTRING_INDEX(Testtag, '_', 3), '_', -1), '.', SUBSTRING_INDEX(Testtag, '_', -1) ) AS target_value FROM your_table WHERE Testtag LIKE 'SG\_QRA\_%';
语句逻辑说明:
- 内层
SUBSTRING_INDEX(Testtag, '_', 3)截取原字符串前3段下划线分隔的内容,例如SG_QRA_SGBAKE_0012会被截成SG_QRA_SGBAKE - 外层套
SUBSTRING_INDEX(..., '_', -1)取上一步结果里最后一段下划线后的内容,也就是你需要的业务标识部分,例如SGBAKE SUBSTRING_INDEX(Testtag, '_', -1)直接取原字符串最后一段下划线后的数字编号部分,例如0012- 用
CONCAT把业务标识、.、数字编号拼接,就得到目标格式的值 - WHERE条件过滤出所有符合
SG_QRA_开头的待修改数据,自动跳过不需要修改的行(比如你样例里的Testtag表头值),注意LIKE里的下划线要加转义符\,因为下划线在LIKE语法里是匹配单个字符的通配符。
核对查询返回的target_value和你预期的结果完全一致后,再执行更新。
第二步:执行批量更新
UPDATE your_table SET Testtag = CONCAT( SUBSTRING_INDEX(SUBSTRING_INDEX(Testtag, '_', 3), '_', -1), '.', SUBSTRING_INDEX(Testtag, '_', -1) ) WHERE Testtag LIKE 'SG\_QRA\_%';
注意事项
- 执行更新前务必备份对应表的数据,避免误操作导致数据丢失
- 如果表中存在格式不满足
X_X_X_X四段下划线分隔的异常值,先单独排查处理,避免转换结果错误 - 建议在测试环境先验证语句执行效果,再到生产环境执行
内容的提问来源于stack exchange,提问作者Gracella Q Sumarlin
相关产品推荐
相关产品推荐

