整数类型存储的时间字段转换为标准Time类型问题求助
根因说明
你遇到的问题核心是存储逻辑和默认转换逻辑不匹配:
- 你的整数时间字段存储的是
HHMMSS格式的数值编码(例:7点27分对应数值72700,因前导零被省略显示为5位) - 数据库默认
TO_TIME处理纯数字字符串时,会默认将数值识别为「当天0点之后经过的秒数」,52700秒换算后就是你得到的14:38:20,和预期结果不符 - 之前指定格式报错是因为你用的格式串
HH24.MI.SS要求待解析字符串带.分隔符,但你传入的是纯数字字符串,格式不匹配导致解析失败
正确转换方案
通用写法(适配大多数支持TO_TIME/LPAD函数的数据库,比如Snowflake、Oracle、PostgreSQL 14+等):
TO_TIME(LPAD(TO_CHAR(OHCRTM), 6, '0'), 'HH24MISS')
逻辑说明:
- 用
LPAD函数给转成字符串的时间值左补0,统一凑满6位,比如72700会补为072700 - 用格式串
HH24MISS解析6位纯数字字符串,对应规则为「前两位是24制小时、中间两位是分钟、最后两位是秒」,即可得到预期的07:27:00
其他数据库兼容写法
如果用的是其他数据库可以对应调整:
- MySQL:
STR_TO_DATE(LPAD(OHCRTM, 6, '0'), '%H%i%s') - SQL Server:
CONVERT(TIME, STUFF(STUFF(RIGHT('000000' + CAST(OHCRTM AS VARCHAR(6)), 6), 3, 0, ':'), 6, 0, ':'))
内容的提问来源于stack exchange,提问作者silverwing90
相关产品推荐
相关产品推荐

