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