오라클에서 소요시간을 표현하는 방법
어떤 작업을 수행할때, 시작시간과 종료시간을 기록하고, 그 값들의 차이를 소요시간으로 보여주는 경우가 있어서 단순히, 종료시간 – 시작시간 으로 하면 될 꺼라 생각을 한다. ㅋ
하지만, 그 차이는 먼가 알수 없는 숫자로 머지 ㅎ
만약 차이가 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
;