首页 > 解决方案 > 如何在函数中测量以毫秒为单位的时间差?

问题描述

我想计算开始时间(类型变量timestamptz)和NOW()我的函数完成时间之间的差异。

select * from _get_date_diff_ms(NOW(), NOW())

将 supbase.io 与 PG 13.3 一起使用,我收到以下错误消息:

operator does not exist: timestamp with time zone - double precision"
CREATE OR REPLACE FUNCTION _get_date_diff_ms(p_begin_time timestamptz, p_end_time timestamptz)
RETURNS int AS
$$
    BEGIN
        RETURN ROUND ((
            EXTRACT (EPOCH FROM p_begin_time -
            EXTRACT (EPOCH FROM p_end_time)
        ) * 1000));
    END;
$$ LANGUAGE plpgsql;

标签: postgresqlplpgsqltimingsupabase

解决方案


我认为您正在寻找的是:



CREATE OR REPLACE FUNCTION public._get_date_diff_ms(p_begin_time timestamp with time zone)
 RETURNS integer
 LANGUAGE plpgsql
AS $function$
    BEGIN
        RETURN round((EXTRACT(EPOCH FROM clock_timestamp() - p_begin_time ) * 1000));
    END;                                                                                
$function$
;

 select _get_date_diff_ms(now() - interval '.5 sec');
 _get_date_diff_ms 
-------------------
              500

我在函数调用中抛出了一个负间隔以实际获得差异。有关各种时间功能的作用,请参见当前时间


推荐阅读