sql - 时间差总和 - Oracle SQL

标签 sql oracle date-arithmetic

我有一张 table :

表1

col1    start_date_time                 end_date_time
Test1   01-06-19 11:43:35.927422000 AM  01-06-19 11:44:20.127907000 AM
Test2   01-06-19 11:44:28.703518000 AM  01-06-19 11:45:06.538883000 AM
Test3   01-06-19 11:42:18.784477000 AM  01-06-19 11:42:27.635102000 AM

我编写了一个查询,给出了时差:

select a.*, end_date_time - start_date_time exec_time from table1 a
order by exec_time desc;

输出表

col1    start_date_time                 end_date_time                   exec_time
Test1   01-06-19 11:43:35.927422000 AM  01-06-19 11:44:20.127907000 AM  +00 00:00:44.200485
Test2   01-06-19 11:44:28.703518000 AM  01-06-19 11:45:06.538883000 AM  +00 00:00:37.835365
Test3   01-06-19 11:42:18.784477000 AM  01-06-19 11:42:27.635102000 AM  +00 00:00:08.850625

我需要像 00:01:29 这样的总和。

如何对 SQL 中的 exec_time 求和?我需要找到总时间。

最佳答案

Oracle 不支持间隔数据类型的聚合,这是一个令人痛心的耻辱,因为这将是解决此类问题的最简单方法。然而,the fiendish mind of Stew Ashton came up with a solution将间隔转换为数字然后再转换回来。

select numtodsinterval(  
  sum(  
    (sysdate+(end_date_time - start_date_time) - sysdate) * 24 * 60 * 60
        + extract(second from (end_date_time - start_date_time)) 
              - trunc(extract(second from (end_date_time - start_date_time))) -- (*)
  )  
  , 'second'  
)  
from table1; 

这里是a demo on db<>fiddle .

(*) 此行使答案精确到微秒。

关于sql - 时间差总和 - Oracle SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56406549/

相关文章:

oracle - 根据开始日期和工作/午餐时间 PL/SQL 计算截止日期

sql - 将范围自动插入到 Oracle 表中

ORACLE-有关 TIMESTAMP 的查询

php - 获取 e_date 中 90 天记录之前的用户数

sql - Postgres 数据库如果不存在则创建

java - 如何确定给定 JDBC 连接的数据库类型?

jquery - 如何使用 Moment JS 计算范围内给定工作日的数量?

c# - 计算后台工作人员 OnProgressChanged 事件的总剩余时间和总时间

php - 使用 php 向 mysql 数据库表中插入一行时出错

java - 跳过结果集中的 if 条件