【问题标题】:How to show interval between two timestamps in hh24:mi notation? [duplicate]如何以 hh24:mi 表示法显示两个时间戳之间的间隔? [复制]
【发布时间】:2019-02-20 20:07:43
【问题描述】:

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

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

差异永远不会超过 24 小时,但 StartTime 可以在第 1 天,EndTime 可以在第 1 天。

例子:

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"

【问题讨论】:

  • 什么是实际的列数据类型 - 您提到了时间戳,还提到了“日期时间戳”,并且您没有显示任何小数秒或时区,所以它们可能只是日期?你的尝试也不是很清楚,你能展示一下你从每一个中得到的结果吗?如果它们完全起作用,我认为它们实际上必须是日期而不是时间戳......
  • Possible duplicate 如果它们是时间戳列。 Possible duplicate 如果它们是日期列。
  • 如果相差超过一天,你想要什么输出?
  • @HijeshVl - “差异永远不会超过 24 小时”(这是否真的总是真的是另一回事,当然 *8-)
  • @Alex Poole : StartTime 和 EndTime 都是 = DATE 字段,所以这种格式:20/02/2019 5:38:01

标签: sql oracle datetime


【解决方案1】:

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

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;

【讨论】:

    【解决方案2】:

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

    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 是一个 dbfiddle。

    【讨论】:

    • 最后 :-) 谢谢戈登
    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 2014-07-12
    • 2015-08-24
    • 1970-01-01
    • 2023-03-08
    • 2016-07-29
    • 2021-09-09
    • 2021-05-12
    相关资源
    最近更新 更多