天天看点

Oralce 将时间差转换为 时:分:秒

Oracle计算时间差表达式

有两个日期数据START_DATE,END_DATE,欲得到这两个日期的时间差(以天,小时,分钟,秒,毫秒):

天:

ROUND(TO_NUMBER(END_DATE - START_DATE))

小时:

ROUND(TO_NUMBER(END_DATE - START_DATE) * 24)

分钟:

ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60)

秒:

ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)

毫秒:

ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 60)

Oracle将时间差表示为 xx时:xx分:xx秒  的格式没有直接的函数,以下两种方法可以试一下

1.取余:

select sysdate,
       trunc((sysdate - to_date('2013-3-21 14:50:10', 'yyyy-mm-dd hh24:mi:ss')) * 24),
       trunc(mod((sysdate - to_date('2013-3-21 14:50:10', 'yyyy-mm-dd hh24:mi:ss')) * 24 * 60, 60)),
       trunc(mod((sysdate - to_date('2013-3-21 14:50:10', 'yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60, 60))
      from dual;
           

结果如下

sysdate             时   分   秒
      2013-03-21 15:01:52     0    11   42
           

2.转换为timestamp

select sysdate - cast(to_date('2013-3-21 14:50:10', 'yyyy-mm-dd hh24:mi:ss') as timestamp) 时差   from dual;
  
 结果:
 
      时差            
  +000000000 00:13:58.000000