我 运行 postgres 中的这个查询说错误 'operator does not exist: interval + double precision'

I am running this query in postgres saying error 'operator does not exist: interval + double precision'

我正在使用这个查询

 SELECT
    (date_trunc('hour', b.pub_ts) - DATE '1970-01-01')* 24 * 60 * 60 +
        EXTRACT(SECOND FROM b.pub_ts),
    date_trunc('hour', b.pub_ts)
from tablename b
limit 10;
ERROR:  operator does not exist: interval + double precision
LINE 1: ...ur', b.pub_ts) - DATE '1970-01-01')* 24 * 60 * 60 +  EXTRACT... 
                                                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

@Vao 说我尝试后输出是

实际输出应该是

因为那时我必须在小数点上应用舍入,但它是间隔的。

像这样

round (((date_trunc('hour', b.pub_ts) - DATE '1970-01-01')* 24 * 60 * 60) + 
               concat(EXTRACT(SECOND FROM b.pub_ts),' seconds')::interval,3)

而不是

    + EXTRACT(SECOND FROM b.pub_ts),

尝试

    +concat(EXTRACT(SECOND FROM b.pub_ts),' seconds')::interval,

背后的想法是秒是间隔(或时间戳)中唯一可以有小数的部分,所以你需要明确定义你添加带小数的秒 - 然后它应该接受它

问题的答案

> round((extract(epoch from ((date_trunc('hour', b.pub_ts) - 
         DATE '1970-01-01')* 24 * 60 * 60)) + 
         EXTRACT(SECOND FROM b.pub_ts))::numeric,3)

并且如果您希望提取日期而不是 eposh

(round((extract(DAY from((date_trunc('hour', b.pub_ts)
 - DATE '1970-01-01')* 24 * 60 * 60)) + 
   EXTRACT(SECOND FROM b.pub_ts))::numeric,3) *1000 / 1000)

https://www.postgresql.org/message-id/3FCF7C40.2040505%40klaster.net