Oracle中日期和时间字段的日常使用

本文目的是记录日常开发中用到的知识点,不涉及具体业务,只关注技术,方便自己和后来者。

目前正在做一个工厂项目,说到工厂项目肯定会有关于产线和人员的排班时长计算,一般一条排班信息包括开始时间、结束时间以及人员或产线的标识。那么常见需求比如统计某个月份产线或者人员的工作时长、计算设备开动率、OEE等。以上需求都涉及到计算每次排班时长(结束时间-开始时间)的操作,这个时长计算在数据库端或者服务器端都可以进行,本文重点介绍下通过oracle相关函数来计算时长,老规矩,先贴表结构和数据样例,大家自行查看:

下面先看一条简单的数据如下图,通过表结构可以知道MA06产线的开始时间:2020-10-12 08:00:00,结束时间:2020-10-12 19:00:00,时长:11小时

接下来我们开始通过sql计算时长,首先执行如下sql,sql和结果如下图所示:

-- 用结束字段 - 开始字段 , planid只起到筛选数据用,无视
select endtime - starttime from mes_shiftproject where planid = '5475604'

时长为0.458333...,可能有些人对这个值有些困惑,不应该是11吗?其实如果你拿0.458333... * 24 就会得出11,所以我们可以得出以下结论:oracle中对date类型的字段进行相减时,得到的结果为相减双方字段相差天数。我们可以在获取到相差天数后灵活计算,比如如果需要小时时长 = 相差天数 * 24,分钟时长 = 相差天数 * 24 * 60。获取到时长之后,就可以结合各种聚合、分组等函数进行业务统计,在此就不展开了,下面在这个知识点基础上进行下扩展:

扩展1:以上对日期字段加减数字的操作,相对来说比较适用于比如给当前date类型字段增加日、时、分、秒等操作,如下图所示:

扩展2:如果是计算date类型字段的月份或年度操作,推荐使用add_months,日常使用样例如下:

扩展3:同样可以使用INTERVAL函数或关键字,进行一段时间前/后时间点的计算,样例demo如下:

以上,完了!!

猜你喜欢

转载自blog.csdn.net/yu102655/article/details/111246538