我正在使用此查询
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,但是它会在间隔中出现。
喜欢这个
round (((date_trunc('hour', b.pub_ts) - DATE '1970-01-01')* 24 * 60 * 60) +
concat(EXTRACT(SECOND FROM b.pub_ts),' seconds')::interval,3)
答案 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