问题描述
创建的列,修改的类型为时间戳,不带时区
以毫秒为单位在此列中获取增量:
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
。