Postgresql:如何以小数小时计算 2 个日期和时间之间的差异?

Postgresql: How to find difference between 2 dates and times in decimal hours?

系统:Postgresql 9.6。我没有设计这个系统,这个 table 有开始日期(日期类型字段)、开始时间(时间)、结束日期(日期)和结束时间(时间)字段,但没有这两个字段之间经过的小时数。每个字段类型上面的字段在 (parens).

我需要什么:使用日期和时间字段,我想要十进制小时数的差异。这将是我的 SELECT 语句中的计算列。

  1. 我为此搜索了搜索引擎和 Whosebug,但没有完全符合我需要的内容。
  2. 一些示例向我展示了天数的差异,但这就是我现在想要的。
  3. 其他示例仅显示 2 次的差异,但我需要说明一天开始并在第二天结束的第三班轮班工人。
  4. 其他例子没有考虑不同的开始日期和结束日期。
  5. 有些人可能会在一天开始并在第二天结束他们的轮班,所以这必须考虑 2 个不同的日期。

我尝试了这个并得到了 "hh:mm:ss" 格式的结果: endtime - starttime as hrs

我一直在寻找如何将该结果转换为十进制小时数。我也试过这些格式:

(date enddate time endtime) - (date startdate time starttime) as hrs

(enddate endtime) - (startdate starttime) as hrs

timestamp(enddate endtime) - timestamp(startdate starttime) as hrs

age(enddate endtime) - age(startdate starttime) as hrs

extract(EPOCH FROM timestamptz(enddate endtime)) - extract(EPOCH from timestamptz (startdate starttime))

我的工作不多 SQL,所以如有任何帮助,我们将不胜感激。我通过看代码来学习,但我也想了解每个部分的作用,这样我就可以理解并将这种理解应用于未来的问题。

谢谢!

我认为这会满足您的要求:

select ((extract(epoch from enddate) + extract(epoch from endtime) -
        (extract(epoch from startdate) + extract(epoch from starttime)
       ) / (60.0 * 60)
select extract (EPOCH from (enddate + endtime - (startdate + starttime))) / (60 * 60) from a;