根本没有理由在表中包含total_time_taken列,您可以随时计算它的值.但是如果你坚持保留它,那么最好将它重新创建为间隔日到第二种数据类型的列,而不是varchar2(假设它是当前的数据类型).所以这里有两个查询供您选择,一个返回间隔天的值到第二个数据类型,另一个值为varchar2数据类型:
此查询返回两个日期之间的差异,作为间隔天到第二个数据类型的值:
sql> with t1(starttime,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,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