如何以'hh24:mi'格式显示两个时间戳之间的间隔?
我有一个带有两个日期戳StartTime
和EndTime
的表,我希望它们之间的小时和分钟差异为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"
答案 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 <>小提琴。