如何批量更新TXN_METHOD表中TXN_MTHD_CODE列的数字格式?
批量更新TXN_MTHD_CODE列的补零方案
针对不同数据库,单条批量更新语句的写法如下:
MySQL/MariaDB
使用字符串截取和补零函数拼接目标格式:
UPDATE TXN_METHOD SET TXN_MTHD_CODE = CONCAT('TXN_MTHD_', LPAD(SUBSTRING(TXN_MTHD_CODE, 10), 3, '0')) WHERE TXN_MTHD_CODE REGEXP '^TXN_MTHD_[0-9]+$';
- 说明:
SUBSTRING(TXN_MTHD_CODE, 10)截取TXN_MTHD_后的数字部分;LPAD(...,3,'0')将数字补为三位带前导零的格式;WHERE条件限定仅更新符合原格式的行,避免误操作。
Oracle
利用字符串截取和拼接语法实现:
UPDATE TXN_METHOD SET TXN_MTHD_CODE = 'TXN_MTHD_' || LPAD(SUBSTR(TXN_MTHD_CODE, 10), 3, '0') WHERE REGEXP_LIKE(TXN_MTHD_CODE, '^TXN_MTHD_[0-9]+$');
- 说明:Oracle用
||做字符串拼接,SUBSTR提取数字部分,REGEXP_LIKE过滤目标行。
SQL Server
提供两种兼容不同版本的写法:
方案1(兼容低版本SQL Server):
UPDATE TXN_METHOD SET TXN_MTHD_CODE = 'TXN_MTHD_' + RIGHT('00' + SUBSTRING(TXN_MTHD_CODE, 10, LEN(TXN_MTHD_CODE)-9), 3) WHERE TXN_MTHD_CODE LIKE 'TXN_MTHD_[0-9]%';
方案2(SQL Server 2012及以上版本,更简洁):
UPDATE TXN_METHOD SET TXN_MTHD_CODE = 'TXN_MTHD_' + FORMAT(CAST(SUBSTRING(TXN_MTHD_CODE, 10, LEN(TXN_MTHD_CODE)-9) AS INT), '000') WHERE TXN_MTHD_CODE LIKE 'TXN_MTHD_[0-9]%';
- 说明:方案1通过
RIGHT('00' + 数字,3)实现补零;方案2将提取的数字转为整数后,用FORMAT直接格式化为三位带前导零的字符串。
关键注意事项
- 执行更新前,建议先运行
SELECT语句验证转换结果,比如MySQL下:
SELECT TXN_MTHD_CODE, CONCAT('TXN_MTHD_', LPAD(SUBSTRING(TXN_MTHD_CODE, 10), 3, '0')) AS new_code FROM TXN_METHOD WHERE TXN_MTHD_CODE REGEXP '^TXN_MTHD_[0-9]+$';
- 务必保留
WHERE条件,防止更新表中不符合原格式的其他行。
内容的提问来源于stack exchange,提问作者user2102665
相关产品推荐
相关产品推荐

