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

Hive 3.1.3 毫秒时间戳转带毫秒字符串格式异常如何修复

Hive 3.1.3 毫秒级时间戳转字符串保留毫秒解决方案

错误原因

你写的代码存在3个核心逻辑问题:

  • unix_timestamp() 函数返回的是秒级整数时间戳,执行时已经丢弃了current_timestamp的毫秒部分
  • 提取出的毫秒字符串直接加在秒级时间戳上,相当于错误将原时间向后偏移了几百到上千秒
  • Hive 3.x版本的from_unixtime()入参仅支持秒级时间戳,格式符中的SSS不会自动识别填充毫秒值,默认会固定输出000,和你传入的参数无关

正确实现方案

方案1:直接处理current_timestamp场景

拆分时间字符串的日期时间部分和毫秒部分后拼接,性能最高:

select concat(
    date_format(current_timestamp, 'yyyy-MM-dd HH:mm:ss'),
    '.',
    regexp_extract(string(current_timestamp), '\\.(\\d{3})', 1)
) as date_formatted_ms;

方案2:处理13位数值型毫秒时间戳场景

如果你的源数据是bigint类型的13位毫秒时间戳,使用以下逻辑:

select concat(
    from_unixtime(floor(ms_timestamp / 1000), 'yyyy-MM-dd HH:mm:ss'),
    '.',
    lpad(ms_timestamp % 1000, 3, '0')
) as date_formatted_ms
from your_table;

两种方案输出的格式均为yyyy-MM-dd HH:mm:ss.SSS,毫秒部分会正确保留三位有效数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:09:01