sql - Postgresql:如何在十进制小时内找到两个日期和时间之间的差异?
问题描述
系统:PostgreSQL 9.6。我没有设计这个系统,这个表有 startdate(日期类型字段)、starttime(时间)、enddate(日期)和 endtime(时间)字段,但没有两个字段之间经过的小时数。上面每个字段的字段类型在(括号)。
我需要什么:使用日期和时间字段,我想要十进制小时的差异。这将是我的 SELECT 语句中的计算列。
- 我已经为此搜索了一个搜索引擎和 Stackoverflow,但没有什么能完全符合我的需要。
- 一些示例向我展示了天数的差异,但这就是我现在想要的。
- 其他示例仅显示 2 次的差异,但我需要考虑从一天开始并在第二天结束的第三班工人。
- 其他示例没有考虑不同的 stardate 和 enddate。
- 有些人可能会在一天开始并在第二天结束他们的轮班,因此这必须考虑到 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,所以任何帮助都将不胜感激。我通过查看代码来学习,但我也想了解每个部分的作用,以便我可以理解并将这种理解应用于未来的问题。
谢谢!
解决方案
select extract (EPOCH from (enddate + endtime - (startdate + starttime))) / (60 * 60) from a;
推荐阅读
- angular - 使用 Angular 模块共享组件
- python - 当服务器上的(子)目录在哪里时,Python ftp.nlst() 返回空列表
- sql - get() laravel eloquent 中只需要一个关系列
- javascript - 在 php 中设置外部 css/js/jpg 文件的过期时间
- android - Firestore 查询权限被拒绝
- jena - 使用 Jena 写入 Ontotext GraphDB
- firebase - 印度的一组开发人员为丹麦的客户提供 Firebase 托管
- mysql - mysql - 在 where 子句存储过程中使用变量
- javascript - 在导出期间显示更新进度
- android - 如何为 android 架构组件生命周期事件添加单元测试?