gpt4 book ai didi

Postgresql:如何查找 2 个日期和 2 个时间之间的小时数?

转载 作者:行者123 更新时间:2023-11-29 11:53:11 25 4
gpt4 key购买 nike

PostgreSQL 9.1

我正在尝试使用查询来查找时间表系统的 2 个日期和 2 个时间之间的差异(以小数/小数小时表示)。我正在使用查询来确保软件(不是我写的)没有任何错误。以下是我正在使用的表中的字段:开始日期是日期字段,开始时间是时间字段,结束日期是日期字段,结束时间是时间字段。

我看过 date time docs for 9.1仍然没有找到我需要的东西。

  • age() 需要 2 个时间戳,并且似乎给出整数天数而非小数天数的差异。我认为不可能将 age() 的结果乘以 24 来获得小时数。我也不知道如何将时间包含在 age() 函数中。
  • 我找不到将日期和时间转换为其他内容以使用其他函数的方法。
  • 我已经在 Google 和 Stackoverflow 上进行了搜索,但没有找到对我有帮助的信息。我断断续续地花了大约 4 个星期的时间。所以可能已经有 30 个小时了。
  • 注意:我认为我无法添加用户定义的函数。我没有权限。

示例数据:

  • 开始日期和时间:“2016-04-29”和“23:00:00”
  • 结束日期和时间:“2016-04-30”和“01:30:00”

我也试过这个sql语句。

SELECT employeetime.dcmasterid as empid, 
nonchargeabletime.startdate as ncsdate,
nonchargeabletime.starttime as ncstime,
nonchargeabletime.enddate as ncedate,
nonchargeabletime.endtime as ncetime,
employeetime.dchours as normhrs,
(timestamp (startdate || ' ' || starttime) - timestamp (enddate || ' ' || endtime)) as diffhrs
FROM employeetime, nonchargeabletime
WHERE (nonchargeabletime.employeetime=employeetime.dcautoinc)
AND (nonchargeabletime.startdate >= '2016-04-24')
AND (nonchargeabletime.startdate <= '2016-04-30')
AND (employeetime.dcmasterid IN ('BLURG'))
AND (nonchargeabletime.nonchargeabletype=10)
ORDER BY employeetime.dcmasterid, nonchargeabletime.startdate, nonchargeabletime.starttime;

但我在 startdate 处遇到语法错误,其中显示 (timestamp (startdate ||

任何人都知道如何做到这一点?

谢谢。

最佳答案

时间添加到date会产生一个timestamp,从一个时间戳中减去另一个会返回一个interval

所以你需要做的就是:

(enddate + endtime) - (startdate + starttime) as diff

interval 在 SQL 上下文中很好,但在编程语言中通常更难处理。您可以使用 extract(epoch from interval)

轻松地将 interval 转换为秒

如果您想将其转换为小时,请使用extract 并除以 3600

extract(epoch from (enddate + endtime) - (startdate + starttime))/3600 as diff_hours

关于Postgresql:如何查找 2 个日期和 2 个时间之间的小时数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37026479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com