这里我有这个查询,每小时有资源使用的总和。
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并正确获取数字吗? 或者你知道更好的方法做同样的事情吗?
答案 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