postgres小数点计算

时间:2016-03-10 04:50:55

标签: sql postgresql

这里我有这个查询,每小时有资源使用的总和。

SUM (CEIL(EXTRACT(EPOCH FROM (ended_at - started_at)/60/60))*price_hourly)

我计算的是在eneded_at和amp;之间有UNIX时间。 begin_at timestamp和use ceil函数返回最小的整数值,然后乘以price_hourly。因此我可以计算操作时间,即使它太小了。

但我发现时间戳是毫秒,如2016-03-09 20:20:0.000010 这不符合我的预期。

ended_at = 2016-03-09 20:20:00.000000
started_at = 2016-03-09 20:20:0.000001
price_hourly = 10

出现0(预期10)

时间戳有一些限制来计算像这样的小数字吗? 也许这部分(0.000001 / 60/60)会掉落最后一个.1

你有任何想法获得最后的.1并正确获取数字吗? 或者你知道更好的方法做同样的事情吗?

1 个答案:

答案 0 :(得分:1)

你分得太早了。 Postgres wiki说dividing intervals is under discussion,如果你想这样做,你应该先转换为秒。

#= SELECT ('2016-03-09 20:20:0.000001'::timestamp - '2016-03-09 20:20:00.000000'::timestamp) / 60;
 ?column?
----------
 00:00:00

#= SELECT EXTRACT(EPOCH FROM '2016-03-09 20:20:0.000001'::timestamp - '2016-03-09 20:20:00.000000'::timestamp) / 60;
       ?column?
----------------------
 1.66666666666667e-08