Oracle에서 두 개의 시간 간격을 알아내는 것은 생각만큼 간단하지 않다. 때문에 사용자 Function 객체를 만들어 간편하게 이용하고 있다.

함수를 이용해 다음과 같은 질의를 한후 결과를 보게 되면 다음과 같다.

select interval(sysdate, sysdate - 1.1415)
  from dual
----------------------------------------
1일 03시간 23분 46초

Function의 내부 코드는 다음과 같다.

create or replace function interval(p_sdate date, p_edate date)
  return varchar2
is
  v_tdate date;
  v_sdate date;
  v_edate date;
begin
  v_sdate := p_sdate;
  v_edate := p_edate;
  if (v_sdate > v_edate) then
    v_tdate := v_sdate;
    v_sdate := v_edate;
    v_edate := v_tdate;
  end if;
return to_number(substr(numtodsinterval(
  (v_edate - v_sdate) * 60*60*24,
  ’second’), 2, 9), ‘999999990′) || ‘일 ‘ ||
  translate(to_char(
  to_date(’20000101000000′, ‘yyyymmddhh24miss’) +
  numtodsinterval(
  (v_edate - v_sdate) * 60*60*24, ’second’),
  ‘hh24[] mi/ ss:’), ‘[]/:’, ‘시간분초’);
exception
  when others then return ”;
end;
/