2009-10-01 8 views
2

일,시, 분, 초 등의 두 날짜의 차이점을 어떻게 알 수 있습니까? 기본적으로 oracle에서 두 개의 날짜를 빼는 것은 decmial로 날짜를 반환합니다.오라클 날짜 뺄셈

답변

4

해당 십진수는 제공된 두 날짜 간의 일 수 차이입니다. 일,시, 분, 초 등으로 전환 할 수있는 약간의 수학을 할 수 있습니다.

EDIT : 찾고있는 것을 봅니다. 나는 쉬운 방법이있을거야,하지만 난 아마 thusly 히 그것을 달성 할 것 : 5.3574585는 뺄셈에 의해 반환 일 수있다

select trunc(5.3574585) days, 
     trunc(mod((5.3574585) * 24, 24)) hours, 
     trunc(mod((5.3574585) * 24 * 60, 60)) minutes, 
     trunc(mod((5.3574585) * 24 * 60 * 60, 60)) seconds 
    from dual; 

...

참고 :이 ISN 정말로 테스트를 마쳤습니다. 내 머리 꼭대기에서 떨어져 있습니다.

+0

짧고 이해하기 쉽기 때문에이 대답을 선택했습니다. 모든 답변을위한 Upvotes - 그들은 모두 작동합니다! 모두에게 감사합니다 – Jeff

+0

결과에 FLOOR 함수를 실행하려고하면 오류가 발생할 수 있으므로 숫자가 부동 소수점임을주의하십시오 (10:30:40 - 10:14:40은 정확히 16 분이되어야하지만 요일은 .011 (1 번 반복). –

6

사용 :

SELECT TO_CHAR(date1,'MMDDYYYY:HH24:MI:SS') date1, 
     TO_CHAR(date2,'MMDDYYYY:HH24:MI:SS') date2, 
     TRUNC(86400*(date2-date1)) - 60*(TRUNC((86400*(date2-date1))/60)) seconds, 
     TRUNC((86400*(date2-date1))/60) - 60*(TRUNC(((86400*(date2-date1))/60)/60)) minutes, 
     TRUNC(((86400*(date2-date1))/60)/60) - 24*(TRUNC((((86400*(date2-date1))/60)/60)/24)) hours, 
     TRUNC((((86400*(date2-date1))/60)/60)/24) days, 
     TRUNC(((((86400*(date2-date1))/60)/60)/24)/7) weeks 
    FROM TABLE 

참조 : A Comparison of Oracle's DATE and TIMESTAMP Datatypes

3

당신은 타임 스탬프로 날짜를 변환하고 개별 구성 요소를 얻기 위해 기본 기능을 사용할 수 있습니다 ...

SELECT EXTRACT(DAY FROM (end_timestamp - start_timestamp)) days 
    , EXTRACT(HOUR FROM (end_timestamp - start_timestamp)) hours 
    , EXTRACT(MINUTE FROM (end_timestamp - start_timestamp)) minutes 
    , EXTRACT(SECOND FROM (end_timestamp - start_timestamp)) seconds 
    FROM (SELECT TO_TIMESTAMP(TO_CHAR(start_date, 'DD/MM/YYYY HH24:MI:SS') 
          , 'DD/MM/YYYY HH24:MI:SS') start_timestamp 
       , TO_TIMESTAMP(TO_CHAR(end_date, 'DD/MM/YYYY HH24:MI:SS') 
          , 'DD/MM/YYYY HH24:MI:SS') end_timestamp 
      FROM (SELECT TO_DATE('01/10/2009 14:25:01' 
           , 'DD/MM/YYYY HH24:MI:SS') start_date 
         , TO_DATE('03/10/2009 23:09:15' 
           , 'DD/MM/YYYY HH24:MI:SS') end_date 
        FROM dual 
       ) 
     ) 
3

왜 그냥 타임 스탬프로 변환하고 암시 적으로 두 번째 데이터 형식에 간격 요일을 사용합니까?

select to_timestamp(sysdate+1.1234) - to_timestamp(sysdate) diff 
from dual 
/

DIFF   
----------- 
1 2:57:42.0