如何在hh24:mi表示法中显示两个时间戳之间的间隔?

时间:2019-02-20 10:29:27

标签: sql oracle datetime

如何以'hh24:mi'格式显示两个时间戳之间的间隔?

我有一个带有两个日期戳StartTimeEndTime的表,我希望它们之间的小时和分钟差异为HH24:mi

两者之间的差异永远不会超过24小时,但是StartTime可以在第一天,EndTime可以在一天。

示例:

StartTime = 19/02/2019 22:52:42 
EndTime = 20/02/2019 02:56:42 

Result wanted = 04:04

到目前为止,我设法获得的最佳结果是:

4,8 : ROUND ((EndTime - StartTime) * 24,2) INTERVAL 

4:4 :  EXTRACT (hour from numtodsinterval (EndTime - add_months (StartTime, floor (months_between (EndTime,StartTime))), 'day')) || ':'
 || EXTRACT (minute from numtodsinterval (EndTime - add_months (StartTime, floor (months_between (EndTime, StartTime))), 'day'))

单独字段中的小时和分钟:小时数:4 |最小:4

trunc(((86400*(EndTime-StartTime))/60)/60)-24*(trunc((((86400*(EndTime-StartTime))/60)/60)/24)) "Hrs"

trunc((86400*(EndTime-StartTime))/60)-60*(trunc(((86400*(EndTime-StartTime))/60)/60)) "Min"

2 个答案:

答案 0 :(得分:0)

我使用您的值写了一个匿名块。但是,如果您要从表中查询,则不是必需的。您可以在选择查询本身中应用此逻辑以获取输出。

declare
start_time date;
end_time date;
output number;
f_out varchar2(10);

begin
start_time :=to_Date('19/02/2019 22:52:42','dd/mm/yyyy hh24:mi:ss');
end_time:= to_Date('20/02/2019 02:56:42','dd/mm/yyyy hh24:mi:ss');
select (end_time-start_time) into output from dual;
--output := trunc(output*86400/3600);
f_out:=lpad(trunc(output*86400/3600),2,'0')||':'||lpad(mod(output*86400,3600)/60,2,'0');
dbms_output.put_line(f_out);

end;

答案 1 :(得分:0)

您可以通过处理日期来做到这一点:

select to_char(date '2000-01-01' + (end_time - start_time), 'hh24:mi')
from (select to_Date('2019-02-19 22:52:42', 'yyyy-mm-dd hh24:mi:ss') as start_time,
             to_Date('2019-02-19 02:56:42', 'yyyy-mm-dd hh24:mi:ss') as end_time
      from dual
     ) t

Here是db <>小提琴。