오라클 소요시간 표현하기

이서진화가 - 일상 블로그

오라클에서 소요시간을 표현하는 방법

어떤 작업을 수행할때, 시작시간과 종료시간을 기록하고, 그 값들의 차이를 소요시간으로 보여주는 경우가 있어서 단순히, 종료시간 – 시작시간 으로 하면 될 꺼라 생각을 한다. ㅋ

하지만, 그 차이는 먼가 알수 없는 숫자로 머지 ㅎ
만약 차이가 55초라면

0.0006365740740740740740 … 
라는 숫자를 만날 것이다.  멈뮈~ ㅋ

저 숫자를 우리가 알아 먹을 수 있게 변환을 하려면
나온값에  * 24(시간)*60(분)*60(초) 을 곱하고, 라운드 처리 하면

즉,  TRUNC(ROUND((종료시간-시작시간)*24*60*60))     소요초가 나옴.
       TRUNC(ROUND((종료시간-시작시간)*24*60))  요건 소요분 ㅎ

그렇탐
TRUNC(ROUND((종료시간-시작시간)*24))  요건 소요시간 되시겠다. ㅎ

허나 55초라 가정하면
소요시간은 0
소요분은 라운드 처리 되어 1분
소요초는 55초
으로 나온다.

내가 원하는 건   00:00:00    으로    시간:분:초  표현하고자 한다.
위는 맞지 않으니,

수정 ㄱㄱ싱.

CASE WHEN 종료시간 IS NOT NULL AND 시작시간 IS NOT NULL THEN
    LPAD(TRUNC(ROUND((종료시간 - 시작시간) *24*60*60) / 60*60)), 2, '0')
   || ':' || LPAD(TRUNC(MOD(ROUND((종료시간 - 시작시간) * 24*60*60), 60*60 ) / 60 ), 2, '0')
   || ':' || LPAD(MOD(ROUND((종료시간 - 시작시간) *24*60*60), 60), 2, '0')
    ELSE ''
END AS    SPEND_TIME

하지만, 요건, 하루 이상 걸리는 건 표현하지 못한다. ㅋ

따로

TO_TIMESTAMP(TO_CHAR(종료시간, ‘YYYYMMDDHH24MISS’), ‘YYYY-MM-DD HH24:MI:SS’) – TO_TIMESTAMP(TO_CHAR(시작시간, ‘YYYYMMDDHH24MISS’), ‘YYYY-MM-DD HH24:MI:SS’)

으로 타임스템프를 이용하면 밀리세컨트까지 알수 있다. ㅎ

여기서 SUBSTR 을 이용하여 짤라 쓰던지, INSTR 로 구분자로 짤라 먹고 쓸수 있겠다. ㅎ

그럼 다음에~ 이슈가 있으면 또 포스팅~~ 하겠뜨아~~

아래는 걍 돌려볼수 있도록 SQL 버무려 놓았으니 돌려보도록

WITH WA AS (
    SELECT TO_TIMESTAMP('2018-08-02 18:06:30', 'YYYY-MM-DD HH24:MI:SS') AS START_TM
    , TO_TIMESTAMP('2018-08-02 18:07:11', 'YYYY-MM-DD HH24:MI:SS') AS END_TM
    FROM DUAL
) SELECT SUBSTR(TO_CHAR(END_TM - START_TM), 9, 15 ) AS X
   , END_TM - START_TM
    , TO_CHAR( END_TM - START_TM )
, SUBSTR(TO_CHAR(END_TM - START_TM), INSTR(TO_CHAR( END_TM - START_TM), ' ') + 1, 8 )
  FROM WA
;

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다