【发布时间】:2016-05-04 11:27:00
【问题描述】:
PostgreSQL 9.1
我正在尝试使用查询来查找时间表系统的 2 个日期和 2 次之间的小数/小数小时差异。我正在使用查询来确保软件(不是我编写的)没有任何错误。以下是我正在使用的表中的字段:startdate 是 Date 字段,starttime 是 Time 字段,enddate 是 Date 字段,endtime 是 Time 字段。
我查看了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 ||。
任何人有任何线索如何做到这一点?
谢谢。
【问题讨论】:
-
你为什么不使用单个
timestamp列? -
我没有设计数据库。这就是供应商所做的。这主要是一个黑盒系统。我获得对数据库的读取权限这一事实本身就是一个小奇迹。
-
并且:您不需要字符串连接来组合日期+时间:
(z.startdate+z.starttime)::timestamp将为您提供组合值 @a_horse_with_no_name:好的! -
@wildplasser:你甚至不需要演员表:
(enddate + endtime) - (startdate + starttime)将返回interval -
@wildplasser:谢谢。我的计算字段“diffhrs”现在以这种格式返回小时和分钟:
08:50:00。如何将其转换为十进制小时?是否有一个函数可以将其转换为十进制小时数?
标签: postgresql date datetime postgresql-9.1