首页 > 解决方案 > Postgresql:如何在十进制小时内找到两个日期和时间之间的差异?

问题描述

系统:PostgreSQL 9.6。我没有设计这个系统,这个表有 startdate(日期类型字段)、starttime(时间)、enddate(日期)和 endtime(时间)字段,但没有两个字段之间经过的小时数。上面每个字段的字段类型在(括号)。

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

  1. 我已经为此搜索了一个搜索引擎和 Stackoverflow,但没有什么能完全符合我的需要。
  2. 一些示例向我展示了天数的差异,但这就是我现在想要的。
  3. 其他示例仅显示 2 次的差异,但我需要考虑从一天开始并在第二天结束的第三班工人。
  4. 其他示例没有考虑不同的 stardate 和 enddate。
  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,所以任何帮助都将不胜感激。我通过查看代码来学习,但我也想了解每个部分的作用,以便我可以理解并将这种理解应用于未来的问题。

谢谢!

标签: sqlpostgresqldatetimecalculated-columns

解决方案


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

推荐阅读