DATE型と異なり経過時間を秒で表現するにはひと手間(EXTRACTファンクション)かけて導出する事になります。
検証SQL
select c1 ,to_char(x.ELAPSED) as 経過日時分秒 ,EXTRACT(SECOND FROM elapsed) + EXTRACT(MINUTE FROM elapsed) * 60 + EXTRACT(HOUR FROM elapsed) * 3600 + EXTRACT(DAY FROM elapsed) * 86400 as 経過秒 ,trunc(( EXTRACT(SECOND FROM elapsed) + EXTRACT(MINUTE FROM elapsed) * 60 + EXTRACT(HOUR FROM elapsed) * 3600 + EXTRACT(DAY FROM elapsed) * 86400)/60,3) as 経過分 from ( select c1,c3-c2 elapsed from ex102 ) x order by c1 ;
実効結果
C1 経過日時分秒 経過秒 経過分
---------- ------------------------------ -------------- --------------
1 +000000000 00:00:01.450000 1.450 0.024
2 +000000000 00:02:00.000000 120.000 2.000
3 +000000001 06:00:00.000000 108000.000 1800.000
4 +000000004 00:00:00.000000 345600.000 5760.000
5 +000000000 00:05:21.000000 321.000 5.350
SQL>
SQL*Plus用
set lin 100 COLUMN "経過日時分秒" FORMAT A30 COLUMN "経過秒" FORMAT 999999990.999 COLUMN "経過分" FORMAT 999999990.999
検証用データ
検証用データは以下の通り作成しました
create table ex102 ( c1 number ,c2 timestamp ,c3 timestamp ); -- 1.45秒後 insert into ex102(c1,c2,c3) values (1,systimestamp,systimestamp + NUMTODSINTERVAL(1.45,'SECOND')); -- 2分後 insert into ex102(c1,c2,c3) values (2,systimestamp,systimestamp + NUMTODSINTERVAL(2,'MINUTE')); -- 30時間後 insert into ex102(c1,c2,c3) values (3,systimestamp,systimestamp + NUMTODSINTERVAL(30,'HOUR')); -- 4日後 insert into ex102(c1,c2,c3) values (4,systimestamp,systimestamp + NUMTODSINTERVAL(4,'DAY')); -- 5分21秒後 insert into ex102(c1,c2,c3) values (5,systimestamp,systimestamp + NUMTODSINTERVAL(60*5+21,'SECOND')); commit;