You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Presto(AWS Athena)毫秒转HH:MM:SS/MM:SS格式报错如何解决

错误原因

报错核心是date_format函数的入参不符合Presto(AWS Athena底层基于Presto引擎)的要求:date_format仅支持timestamp/timestamp with time zone类型作为第一个入参,你代码中传入的是time类型,因此触发参数不匹配错误。

另外你最初版本的SQL还存在语法问题:case分支中直接用逗号分隔时间值和格式串的写法不符合SQL规范,调整后使用date_format的版本已经修复了该问题,仅需补充类型转换即可正常运行。

正确实现方案

下面两种方案都可以实现毫秒值转HH:MM:SS/MM:SS格式的需求:

方案1:转换time类型为timestamp后调用date_format

仅需要给你原有逻辑生成的time值套一层cast(xxx as timestamp)即可,修改后的代码段如下:

(case 
    when milliseconds/1000 < 60 * 60
        then date_format(cast(time '00:00:00' + milliseconds * interval '1' second as timestamp), '%i:%s')
    else date_format(cast(time '00:00:00' + milliseconds * interval '1' second as timestamp), '%H:%i:%s')
end) as hhmmss

方案2:直接基于秒数格式化的简化写法

你也可以跳过time类型计算,直接把毫秒转成总秒数后格式化,逻辑更简洁:

(case 
    when floor(milliseconds / 1000) < 3600
        then date_format(date_parse(cast(floor(milliseconds / 1000) as varchar), '%s'), '%i:%s')
    else date_format(date_parse(cast(floor(milliseconds / 1000) as varchar), '%s'), '%H:%i:%s')
end) as hhmmss

内容的提问来源于stack exchange,提问作者Zole72

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:06:04