首页 > 解决方案 > PostgreSQL 的时间戳差异(以分钟为单位)

问题描述

我有以下查询:

Select works.id, works.client_id, COALESCE(TIMESTAMPDIFF(MINUTE,works.begin_at,works.finish_at), 0) / 60 * (clients.worker_cost_hourly * works.number_of_workers + works.machines *             clients.machine_cost_hourly) as cost
from works join clients on works.client_id = clients.id
where works.paid = 0

这很好用,mysqlpostgresql抱怨TIMESTAMPDIFF......有没有办法在两个 DBMS 中使用相同的查询实现这种行为?

顺便说一句,works.begin_at并且works.finish_at定义为time

标签: sqlpostgresqltimedate-arithmetic

解决方案


您可以只减去两次:这为您提供了一个间隔,您可以使用 将其转换为秒extract(),然后使用算术转换为分钟:

extract(epoch from works.finish_at - works.begin_at) / 60

这将返回一个整数值。如果你也想要小数部分,那么:

extract(epoch from works.finish_at - works.begin_at) / 60.0 

推荐阅读