嗨我有下表,其中包含开始时间,结束时间,总时间
STARTTIME | ENDTIME | TOTAL TIME TAKEN | 02-12-2013 01:24:00 | 02-12-2013 04:17:00 | 02:53:00 |
我需要TOTAL TIME TAKEN
使用oracle中的更新查询更新上面的字段
为此,我尝试了以下选择查询
select round((endtime-starttime) * 60 * 24,2), endtime, starttime from purge_archive_status_log
但是我得到了02.53,但是我的期望格式是02:53:00请让我知道我该怎么做?
根本没有理由total_time_taken
在您的表中包含该列,您可以随时计算它的值.但是如果你坚持保留它,最好将它重新创建为interval day to second
数据类型列,而不是varchar2
(假设它是当前的数据类型).所以这里有两个查询供您选择,一个返回interval day to second
数据类型的值,另一个返回数据类型的值varchar2
:
此查询返回两个日期之间的差异作为interval day to second
数据类型的值:
SQL> with t1(starttime, endtime, total_time_taken ) as( 2 select to_date('02-12-2013 01:24:00', 'dd/mm/yyyy hh24:mi:ss') 3 , to_date('02-12-2013 04:17:00', 'dd/mm/yyyy hh24:mi:ss') 4 , '02:53:00' 5 from dual 6 ) 7 select starttime 8 , endtime 9 , (endtime - starttime) day(0) to second(0) as total_time_taken 10 from t1 11 ;
结果:
STARTTIME ENDTIME TOTAL_TIME_TAKEN ----------- ----------- ---------------- 02-12-2013 01:24:00 02-12-2013 04:17:00 +0 02:53:00
此查询返回两个日期之间的差异作为varchar2
数据类型的值:
SQL> with t1(starttime, endtime, total_time_taken ) as( 2 select to_date('02-12-2013 01:24:00', 'dd/mm/yyyy hh24:mi:ss') 3 , to_date('02-12-2013 04:17:00', 'dd/mm/yyyy hh24:mi:ss') 4 , '02:53:00' 5 from dual 6 ) 7 select starttime 8 , endtime 9 , to_char(extract(hour from res), 'fm00') || ':' || 10 to_char(extract(minute from res), 'fm00') || ':' || 11 to_char(extract(second from res), 'fm00') as total_time_taken 12 from(select starttime 13 , endtime 14 , total_time_taken 15 , (endtime - starttime) day(0) to second(0) as res 16 from t1 17 ) 18 ;
结果:
STARTTIME ENDTIME TOTAL_TIME_TAKEN ----------- ----------- ---------------- 02-12-2013 01:24:00 02-12-2013 04:17:00 02:53:00