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

Bul*_*ush 2 postgresql datetime date postgresql-9.1

Postgresql 9.1

我正在尝试使用查询来查找时间表系统的2个日期和2个时间之间的小数/小数小时差异.我正在使用查询来确保软件(不是我编写的)没有任何错误.以下是我正在使用的表中的字段:startdate是Date字段,starttime是Time字段,enddate是Date字段,endtime是Time字段.

我查看了9.1日期时间文档,但仍未找到我需要的内容.

  • age()需要2个时间戳,并且似乎给出整数而不是分数天数的差异.我认为不可能将age()的结果乘以24来得到小时数.我也不知道如何在age()函数中包含时间.
  • 我无法找到将日期和时间转换为其他东西以使用其他功能.
  • 我搜索过谷歌和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;
Run Code Online (Sandbox Code Playgroud)

但是我startdate说它的语法错误(timestamp (startdate ||.

任何人有任何线索如何做到这一点?

谢谢.

a_h*_*ame 8

添加timedate收益率timestamp减去从另一个回报的一个时间戳interval.

所以你需要做的就是:

(enddate + endtime) - (startdate + starttime) as diff
Run Code Online (Sandbox Code Playgroud)

一个interval是SQL的情况下很好的,但通常很难在编程语言来处理.您可以轻松地使用转换interval为秒extract(epoch from interval)

如果你想将它转换为小时使用extract并除以3600

extract(epoch from (enddate + endtime) - (startdate + starttime))/3600 as diff_hours
Run Code Online (Sandbox Code Playgroud)