sql - 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
这很好用,mysql
但postgresql
抱怨TIMESTAMPDIFF
......有没有办法在两个 DBMS 中使用相同的查询实现这种行为?
顺便说一句,works.begin_at
并且works.finish_at
定义为time
解决方案
您可以只减去两次:这为您提供了一个间隔,您可以使用 将其转换为秒extract()
,然后使用算术转换为分钟:
extract(epoch from works.finish_at - works.begin_at) / 60
这将返回一个整数值。如果你也想要小数部分,那么:
extract(epoch from works.finish_at - works.begin_at) / 60.0
推荐阅读
- html - 使项目更大而不会碰到 html 中的其他项目
- java - Jetty 9 客户端设置 Content-Range 值正常不起作用
- angular - Angular 9:不订阅其他组件?
- python - 将通过列的函数,如果数字大于 0 返回列名,但当为 0 时返回“不可用”
- r - 在 R 中使用 Plotly 绘制显示毫秒的时间戳
- x86-64 - 在这个简单的例子中调用汇编指令做什么?
- node.js - API中的Put方法总是收到空的请求体
- unity3d - 如何检查 Unity 中 NavMeshAgent 的路径是否存在到 NavMesh 上的某个点?
- csv - spark.read.format('csv') 中的数据帧不正确
- java - 使用 Spring Boot 请求 Wrapper Body