SQL中如何为整数添加前导零 正确拼接转换为DATETIME类型
整数存储hhmmss格式时间转DATETIME的补零实现方案
你当前拼接逻辑报错的核心原因是整数运算返回的数值转字符串时,不会自动保留2位固定长度,直接用LPAD()函数给拆分出的时间段补前导零即可,这是性能最高、逻辑最直观的实现方式。
方案1:保留原有逐段拆分逻辑,补全前导零
直接在你原有代码的基础上,给每一段拆分出的时、分、秒值套一层LPAD(),固定返回2位长度字符串,长度不足时左侧补0:
SET new_column = CAST(CONCAT('2020-01-01T', LPAD(date_column / 10000, 2, '0'), ':', LPAD(date_column % 10000 / 100, 2, '0'), ':', LPAD(date_column % 100, 2, '0') AS DATETIME)
LPAD(值, 目标长度, 填充字符)会自动判断传入值的长度:比如9点拆分出的数值是9,处理后返回09;1分拆分出的数值是1,处理后返回01;0秒返回00,完全匹配DATETIME类型要求的yyyy-mm-ddThh:mm:ss格式。
方案2:整体补零+原生时间解析,代码更简洁
不需要逐段做数值拆分和冒号拼接,直接把整个时间整数统一补到6位长度,再用数据库原生的时间解析函数处理即可,代码容错率更高:
SET new_column = STR_TO_DATE( CONCAT('2020-01-01 ', LPAD(date_column, 6, '0')), '%Y-%m-%d %H%i%s' )
这个写法会先把时间整数补为6位定长字符串:比如9点1分0秒对应的整数值90100补零后为090100,10点对应的100000本身已经是6位不会改动,后续STR_TO_DATE会按%H%i%s的格式自动识别时、分、秒值,大表批量更新时性能和逐段拼接方案没有明显差异。
注意事项
- 正式更新前先执行SELECT语句校验补零、解析结果,提前排查
date_column中大于235959、为负数的异常脏数据,避免生成非法时间值。
内容的提问来源于stack exchange,提问作者Maxxx
相关产品推荐
相关产品推荐

