Oracle SQL批量更新表列值:将无短划线条码转为指定带短划线格式
Oracle条码格式批量更新解决方案
原SQL语句的问题
- Oracle的
SUBSTR函数起始索引为1,而非0,原语句中SUBSTR(b.barcode, 0, 3)会导致截取错误 - Oracle字符串连接使用
||运算符,而非.CONCAT()方法,原连接语法不符合Oracle规范 - 条件判断可简化:直接筛选长度为15且不含短划线的记录,无需判断多段短划线
正确的更新脚本
先执行查询语句验证转换结果:
SELECT barcode, CASE WHEN LENGTH(barcode) = 15 AND barcode NOT LIKE '%-%' THEN SUBSTR(barcode, 1, 3) || '-' || SUBSTR(barcode, 4, 4) || '-' || SUBSTR(barcode, 8, 7) || '-' || SUBSTR(barcode, 15, 1) ELSE barcode END AS formatted_barcode FROM barcode WHERE LENGTH(barcode) = 15 AND barcode NOT LIKE '%-%';
确认结果正确后,执行更新语句:
UPDATE barcode SET barcode = SUBSTR(barcode, 1, 3) || '-' || SUBSTR(barcode, 4, 4) || '-' || SUBSTR(barcode, 8, 7) || '-' || SUBSTR(barcode, 15, 1) WHERE LENGTH(barcode) = 15 AND barcode NOT LIKE '%-%';
说明
- 仅更新长度15位且不含短划线的条码,避免误改已格式化的记录
- 转换规则严格对应
XXX-XXXX-XXXXXXX-X格式:- 前3位 + '-'
- 接下来4位 + '-'
- 再接下来7位 + '-'
- 最后1位
内容的提问来源于stack exchange,提问作者Zain Shamshad
相关产品推荐
相关产品推荐

