Postgresql:如何找到两个日期和时间之间的十进制小时数之差?

问题描述 投票:0回答:2

系统:PostgreSQL 9.6。我没有设计此系统,该表具有开始日期(日期类型字段),开始时间(时间),结束日期(日期)和结束时间(时间)字段,但是两个之间没有经过小时。上面每个字段的字段类型都在(原谅)。

我需要:使用日期和时间字段,我希望以十进制小时为单位。这将是我的SELECT语句中的计算列。

  1. 我已经在搜索引擎和Stackoverflow中搜索了此内容,没有任何内容完全符合我的需求。
  2. 一些示例向我展示了几天之间的差异,但这就是我想要的。
  3. 其他示例仅显示2倍的差异,但是我需要考虑从一天开始到第二天结束的三班制工人。
  4. 其他示例未考虑不同的日期和结束日期。
  5. 有些人可能从一天开始,第二天结束他们的轮班,所以必须考虑两个不同的日期。

我尝试过此操作,并以“ 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并不多,所以可以得到任何帮助。我通过阅读代码来学习,但是我也想了解每个部分的作用,因此我可以理解并将这种理解应用于将来的问题。

谢谢!

sql postgresql datetime calculated-columns
2个回答
0
投票
我认为这将满足您的要求:

select ((extract(epoch from enddate) + extract(epoch from endtime) - (extract(epoch from startdate) + extract(epoch from starttime) ) / (24.0 * 60 * 60)


0
投票
select extract (EPOCH from (enddate + endtime - (startdate + starttime))) / (60 * 60) from a;
© www.soinside.com 2019 - 2024. All rights reserved.