我在postgres中运行此查询,说错误'运算符不存在:interval + double precision'

时间:2017-08-03 09:26:53

标签: sql postgresql datetime intervals

我正在使用此查询

 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说我尝试输出后

enter image description here

实际输出应为

enter image description here

因为那时我必须在小数点上应用round,但是它会在间隔中出现。

喜欢这个

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

2 个答案:

答案 0 :(得分:1)

而不是

    + EXTRACT(SECOND FROM b.pub_ts),

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

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

答案 1 :(得分:0)

问题的答案

> 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