2014-02-18 3 views
1

나는 이벤트의 끝 - 이벤트 시작 부분을 뺀 다음 시간차를 얻으려고합니다. 나는 시도하여 시작 :hh : mm : ss를 얻으려면 두 날짜 빼기

TO_CHAR(WXN_MOPACTIVITY.MOPEND, 'YYYY-MM-DD HH24:MI:SS') - TO_CHAR(WXN_MOPACTIVITY.MOPSTART, 'YYYY-MM-DD HH24:MI:SS') AS TIME_DIF 

그러나 이것은 작동하지 않습니다. 나는 그 때 시도했다 :

(WXN_MOPACTIVITY.MOPEND - WXN_MOPACTIVITY.MOPSTART) AS TIME_DIF 

이것은 저에게 0.125 같이 응답을 준다. 이 날짜 필드를 빼고 hh : mm : ss 형식으로 끝내려면 어떻게합니까?

답변

1

mopendmopstart이 모두 date 열이라고 가정 할 때, 두 개의 날짜를 빼면 일의 차이가 반환된다. 이를시, 분, 초로 포맷하려면 약간의 수학이 필요합니다.

with diffs as (
    select 0.125 diff_in_days from dual 
) 
select trunc(mod(diff_in_days * 24, 24)) diff_in_hours, 
     trunc(mod(diff_in_days * 24 * 60, 60)) diff_in_mins, 
     trunc(mod(diff_in_days * 24 * 60 * 60, 60)) diff_in_secs 
    from diffs; 

대안이 올라가는`number`을 반환을 빼면 개별 구성 요소

with diffs as (
    select numtodsinterval(0.125, 'day') diff_interval from dual 
) 
select extract(hour from diff_interval) diff_in_hours, 
     extract(minute from diff_interval) diff_in_mins, 
     extract(second from diff_interval) diff_in_secs 
    from diffs; 
-3

당신은이 일을해야

TO_DATE((WXN_MOPACTIVITY.MOPEND - WXN_MOPACTIVITY.MOPSTART), 
     'YYYY-MM-DD HH24:MI:SS') AS TIME_DIF 

시도 할 수 있습니다. (나는 지금 어떤 오라클 DB도 가지고 있지 않다)

+0

interval을 사용하고 추출하는 것입니다. 그 형식을 사용하는'number'를 날짜로 변환 할 수 없습니다. –

+0

오른쪽. 하지만 내가 말했듯이 지금은 DB가 없습니다. 어쨌든 to_char가 작동합니다. 그리고 tommorow는 답을 바로 잡으려고 노력할 것입니다. –

+0

물론, 숫자를 'to_char'할 수 있습니다. 하지만 날짜 형식 마스크가 아닙니다. 숫자 0.125를 문자열 '0.125'로 변환 할 수 있습니다. 그러나'to_char'는 0.125가 일 단위 일 수도 있고 일을 'hh24 : mi : ss'형식으로 변환하는 방법을 알지 못합니다. –

관련 문제