获取当前日期和列时间戳的增量-不存在:双精度-无时区的时间戳

问题描述

创建的列,修改的类型为时间戳,不带时区

以毫秒为单位在此列中获取增量:

select extract(milliseconds from modified_at - created_at) as delta_millsfrom shop_order

好。现在,我想获取当前日期的增量和列 created_at

我尝试这个:

select id,extract(milliseconds from (EXTRACT(EPOCH FROM current_timestamp) * 1000) - created_at) as detla_mills from shop_order 

但是会出错

:
ERROR:  operator does not exist: double precision - timestamp without time zone
LINE 1: ...om (EXTRACT(EPOCH FROM current_timestamp) * 1000) - created_...
                                                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
sql state: 42883
Character: 85

解决方法

从错误的文本并检查失败的表达式的语法来看,问题在于EXTRACT(EPOCH FROM current_timestamp)可能不是timestamp类型,并且可以肯定地乘以* 1000可以吗? t明智地导致使用timestamp类型(日期是(2020年9月16日)乘以1000,是吗?)。根据错误,它是一个double precision,然后就不能从中减去timestamp

您需要从timestamp中减去基数current_timestamp,然后将其转换为所需的其他类型或部分,或者以相同的方式将基数和current_timestamp转换为可以直接减去增量的另一种类型(例如,将提取的EPOCH在该timestamp的开头转换回基数EPOCH