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

PostgreSQL计算两个Timestamp毫秒差值遇到的问题

解决PostgreSQL Timestamp毫秒差值计算问题

你的核心问题是SQL语法错误,导致没有正确获取到秒数差值。

你写的语句SELECT * FROM EXTRACT(EPOCH FROM(NOW()::TIMESTAMP - '2022-10-23 16:34:53.227'))是错误的——EXTRACT是标量函数,不需要用FROM子句包裹,这种错误写法会让PostgreSQL无法正确解析,返回的其实是两个时间相减后的interval类型,而不是你期望的秒数值。

正确的写法

直接将EXTRACT作为查询列,不需要FROM:

SELECT EXTRACT(EPOCH FROM (NOW()::TIMESTAMP - '2022-10-23 16:34:53.227'));

这个语句会返回带小数的秒数(比如差值是1.5秒就返回1.5),此时直接乘以1000就能得到毫秒值:

SELECT EXTRACT(EPOCH FROM (NOW()::TIMESTAMP - '2022-10-23 16:34:53.227')) * 1000;

如果需要整数类型的毫秒值,用CAST转换即可:

SELECT CAST(EXTRACT(EPOCH FROM (NOW()::TIMESTAMP - '2022-10-23 16:34:53.227')) * 1000 AS bigint);

为什么之前的转换没用?

因为你之前操作的对象是interval类型,而不是EXTRACT返回的数值类型。当语法错误导致返回interval时,无论转成numeric还是int,本质还是对interval的转换,不是时间差的总毫秒数——而正确获取到EXTRACT的数值结果后,乘法和类型转换都能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:40:48