SQL/MySQL中仅针对7位编码删除前导0的实现方法咨询
MySQL 按规则删除7位长度编码前导0的实现
前提说明
待处理的编码字段需为字符串类型(如VARCHAR、CHAR),数值类型本身无法存储前导0,无需该操作。
核心规则
仅当编码字符长度严格等于7时,删除其前置的0;其余长度的编码原样保留。
临时查询处理(不修改原表数据)
适合提取处理后数据、不改动源表的场景,可根据实际需求选择写法:
写法1:删除所有前置0
如果需要清除7位编码开头的全部0,使用TRIM函数实现:
SELECT IF(CHAR_LENGTH(编码字段名) = 7, TRIM(LEADING '0' FROM 编码字段名), 编码字段名) AS 处理后编码 FROM 表名;
也可使用可扩展的CASE WHEN写法,方便后续新增其他判断规则:
SELECT CASE WHEN CHAR_LENGTH(编码字段名) = 7 THEN TRIM(LEADING '0' FROM 编码字段名) ELSE 编码字段名 END AS 处理后编码 FROM 表名;
写法2:仅删除开头第一个0
如果业务场景中7位编码仅存在1个前置0,只需删除第一个字符的0即可,可使用SUBSTRING实现:
SELECT IF(CHAR_LENGTH(编码字段名) = 7 AND LEFT(编码字段名, 1) = '0', SUBSTRING(编码字段名, 2), 编码字段名) AS 处理后编码 FROM 表名;
永久更新原表数据
需要直接修改表内符合条件的编码时使用,执行前务必备份对应数据:
对应删除所有前置0的更新语句
UPDATE 表名 SET 编码字段名 = TRIM(LEADING '0' FROM 编码字段名) WHERE CHAR_LENGTH(编码字段名) = 7;
对应仅删除开头第一个0的更新语句
UPDATE 表名 SET 编码字段名 = SUBSTRING(编码字段名, 2) WHERE CHAR_LENGTH(编码字段名) = 7 AND LEFT(编码字段名, 1) = '0';
规则验证示例
- 7位编码
0100396:处理后得到100396,符合要求 - 6位编码
010611:长度不符合条件,原样返回010611 - 7位无前置0的编码
1234567:无前置0可删除,原样返回 - 7位多前置0编码
0012345:删除所有前置0的写法会输出12345,仅删第一个0的写法会输出012345,可按需选择
内容的提问来源于stack exchange,提问作者Alin Gabriel
相关产品推荐
相关产品推荐

