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

如何将UTC微秒级BigInt转换为Timestamp并计算时间差?

微秒级BigInt时间戳转Timestamp及秒级时间差计算方案

先说说你之前尝试的问题

  • 第一个语句select to_date(1681149457712377::text, 'YYYYMMDD')完全不对路:to_date是用来解析日期格式字符串的,而你的字段是微秒级的时间戳数值,两者格式不匹配,必然报错。
  • 第二个语句的问题是单位换算错了:你除以1000得到的是毫秒,但TIMESTAMP 'epoch' + 数值 * INTERVAL '1 second'要求数值是秒数,所以应该除以1000000(1e6)才能把微秒转成秒,否则数值过大,得到的自然是离谱的未来日期。

正确的Timestamp转换方法

如果需要把微秒级BigInt转成UTC Timestamp,有两种简单方式:

  1. 直接用微秒间隔计算:
SELECT TIMESTAMP 'epoch' + 1681149457712377 * INTERVAL '1 microsecond';
  1. 用to_timestamp函数(先转成秒的浮点数):
SELECT to_timestamp(1681149457712377 / 1000000.0) AT TIME ZONE 'UTC';

这两种方式都会得到正确的结果:2023-04-10 10:37:37.712377,和你给出的event_date匹配。

直接计算秒级时间差(无需转Timestamp)

你的核心需求是计算两个时间戳的秒级差,其实不用先转成Timestamp,直接对数值做运算更高效:

  • 要保留小数(精确到微秒转秒的小数部分):
SELECT (1681149457712377 - 1681101230813726) / 1000000.0 AS seconds_diff;

结果为48226.898651秒。

  • 如果只需要整数秒:
SELECT (1681149457712377 - 1681101230813726) // 1000000 AS integer_seconds_diff;

结果为48226秒。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:33:28