トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

7-25 経過時間を取得(低精度)

SQLパズル

任意の日付から、現在までの経過時間を
日、時間、分、秒
で求める。


SQL

select to_char(Val,'yyyy/mm/dd') as Val,
extract(day    from NumToDsInterval(sysdate-Val,'day')) as 日,
extract(hour   from NumToDsInterval(sysdate-Val,'day')) as 時間,
extract(minute from NumToDsInterval(sysdate-Val,'day')) as 分,
extract(second from NumToDsInterval(sysdate-Val,'day')) as 秒
from (select to_date('1582/06/01 08:30:20','yyyy/mm/dd hh24:mi:ss') as Val from dual
union select to_date('2000/01/01 19:30:40','yyyy/mm/dd hh24:mi:ss') from dual
union select to_date('2005/08/01 10:30:50','yyyy/mm/dd hh24:mi:ss') from dual);

--■■■低精度なので誤差が発生することがあります■■■
select
extract(minute from NumToDsInterval(
        to_date('2005/08/01 23:16:00','yyyy/mm/dd hh24:mi:ss') -
        to_date('2005/08/01 23:00:00','yyyy/mm/dd hh24:mi:ss'),'day')) as 分
from dual;


解説

extract関数とNumToDsInterval関数を組み合わせてます。
低精度なので誤差が発生することがあります。

7-26 経過時間を取得(高精度)