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

如何在PostgreSQL函数中计算timestamptz的毫秒级时间差并修复运算符报错

错误原因

你的函数逻辑中括号位置错误,触发了类型不匹配:你实际执行的是 timestamptz类型值 - 双精度类型的秒数,PostgreSQL没有对应运算的内置运算符,因此抛出报错。

修复后的函数代码

CREATE OR REPLACE FUNCTION _get_date_diff_ms(p_begin_time timestamptz, p_end_time timestamptz)
RETURNS int AS
$$
BEGIN
    -- 先计算两个时间的差值得到interval,再转成秒级时间戳乘以1000取整
    RETURN ROUND(
        EXTRACT(EPOCH FROM (p_end_time - p_begin_time)) * 1000
    )::int;
END;
$$ LANGUAGE plpgsql;

验证调用

你可以用下面的语句验证效果:

-- 两个相同时间差为0
select _get_date_diff_ms(NOW(), NOW());
-- 模拟1秒差,返回约1000
select _get_date_diff_ms(NOW(), NOW() + INTERVAL '1 second');

可选优化方案

如果不需要复杂的PL/pgSQL逻辑,你可以直接用SQL函数实现,执行效率更高:

CREATE OR REPLACE FUNCTION _get_date_diff_ms(p_begin_time timestamptz, p_end_time timestamptz)
RETURNS int AS
$$
SELECT ROUND(EXTRACT(EPOCH FROM (p_end_time - p_begin_time)) * 1000)::int;
$$ LANGUAGE sql STABLE;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:06:03