2014/04/15

[Oracle] 날짜간 시간차이 계산

오라클에서 두 날짜간의 차이를 시간으로 환산할 때
이리저리 찾다가 가장 심플한거 같아서 챙겼지요...
1.
SELECT (dd*24)+SUBSTR (hms, 1, 2)|| '.'|| SUBSTR (hms, 3, 2)|| '분'|| SUBSTR (hms, 5, 2)|| '초' day
2.
SELECT dd|| '일'|| SUBSTR (hms, 1, 2)|| '시'|| SUBSTR (hms, 3, 2)|| '분'|| SUBSTR (hms, 5, 2)|| '초' day
  FROM (
         SELECT TRUNC (end_date - start_date) dd,
                TO_CHAR (TO_DATE (TRUNC ( MOD(end_date - start_date, 1) * 24 * 60 * 60), 'sssss'), 'hh24miss') hms
           FROM (
                 SELECT TO_DATE ('2006-06-20 09:07:34', 'yyyy-mm-dd hh24:mi:ss') end_date,
                        TO_DATE ('2006-06-18 14:45:30', 'yyyy-mm-dd hh24:mi:ss') start_date
                   FROM DUAL
                )
       )
1.결과 : 42.22분03초
2.결과 : 1일18시22분03초

* 포스팅 시점엔 상기의 쿼리를 어디서 참고했는지 떠오르지 않았는데 오늘 문득 sql관련하여 주로 방문하는 사이트에서 관련 쿼리를 찾았다. 이에 밝힌다.
관련 출처 : 쏘쿨(http://www.soqool.com)

* 두 날짜 사이의 시간 차이를 구하는 쿼리에서
일반적으로 알려진 쿼리를 사용하는 경우 날짜에 따라 반올림 관계로 결과가 다르게 나오는 경우가 있음.
TIMESTAMP를 사용하면 정확한 시간을 구하는 것이 가능하다.
SELECT SUBSTR(T_TERM,2,9) * 24 + SUBSTR(T_TERM,12,2) || SUBSTR(T_TERM,14,3) TIME_TERM
  FROM (
        SELECT TO_CHAR(TO_TIMESTAMP(END_DATE,'YYYYMMDDHH24MISS') - TO_TIMESTAMP(START_DATE,'YYYYMMDDHH24MISS')) T_TERM
          FROM (
                SELECT :END_DATE   AS END_DATE,
                       :START_DATE  AS START_DATE
                  FROM DUAL
               )
       )

댓글 없음:

댓글 쓰기