source

Oracle 시간(초)으로 변환:분:초

nicesource 2023. 6. 23. 22:16
반응형

Oracle 시간(초)으로 변환:분:

사용자 사용 가능 시간을 시간:분:으로 표시해야 합니다.지정된 총 초 수 값의 초 형식입니다.동일한 작업을 수행할 수 있는 Oracle 함수를 알고 있다면 감사합니다.오라클을 사용하고 있습니다.

시간 내 주셔서 감사합니다.

주어진 시간(초)을 HH:MI:SS 형식으로 변환하려는 경우에는 이렇게 하면 됩니다.

SELECT 
    TO_CHAR(TRUNC(x/3600),'FM9900') || ':' ||
    TO_CHAR(TRUNC(MOD(x,3600)/60),'FM00') || ':' ||
    TO_CHAR(MOD(x,60),'FM00')
FROM DUAL

어디에x시간(초)

이거 드셔보세요.매우 간단하고 사용하기 쉽습니다.

select to_char(to_date(10000,'sssss'),'hh24:mi:ss') from dual;

다음 코드는 덜 복잡하며 동일한 결과를 제공합니다.'X'는 시간으로 변환할 초 수입니다.

Oracle에서는 다음을 사용합니다.

SELECT TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (X, 'second'),
                'hh24:mi:ss'
               ) hr
  FROM DUAL;

SqlServer에서 다음을 사용합니다.

SELECT CONVERT(varchar, DATEADD(s, X, 0), 108);

f.e.e.1분(초)을 포함하는 변수가 있는 경우 시스템 타임스탬프에 변수를 추가한 다음 to_char를 사용하여 변수에서 다른 시간 부분을 선택할 수 있습니다.

select to_char(systimestamp+60/(24*60*60), 'yyyy.mm.dd HH24:mi:ss') from dual

vogash의 답변에 대한 코멘트는 24시간 이상의 시간을 가질 수 있기 때문에 타임 카운터와 같은 것을 원하는 것으로 알고 있습니다.이를 위해 다음을 수행할 수 있습니다.

select to_char(trunc(xxx/3600)) || to_char(to_date(mod(xxx, 86400),'sssss'),':mi:ss') as time
from dual;

xxx시간(초)입니다.

첫 번째 부분은 시간을 누적하고 두 번째 부분은 나머지 분과 초를 계산합니다.예를 들어, 가지고 있는 것.150023 seconds그것은 당신에게 줄 것입니다.41:40:23.

하지만 만약 당신이 항상 hh24:mi:ss를 가지고 싶다면, 당신이 더 많이 가지고 있더라도.86000 seconds(1일) 다음 작업을 수행할 수 있습니다.

select to_char(to_date(mod(xxx, 86400),'sssss'),'hh24:mi:ss') as time 
from dual;

xxx시간(초)입니다.

예를 들어, 가지고 있는 것.86402 seconds시간을 재설정합니다.00:00:02.

유감스럽게도...하지만 24시간 미만이면 간단한 속임수가 있습니다.

Oracle은 날짜에 추가된 숫자(일)를 가정합니다.초 수를 일로 변환합니다.현재 날짜를 추가한 다음to_date관심 있는 부분만 가져가는 기능.당신이 가지고 있다고 가정하면x초:

select to_char(sysdate + (x / ( 60 * 60 * 24 ) ), 'HH24:MI:SS')
  from dual

현재 데이터를 다시 제거하고 일, 시간, 분 및 초 단위로 차이를 얻을 수 있지만 24시간 이상인 경우에는 작동하지 않습니다.

다음과 같은 것을 원하는 경우:51:10:05즉, 51시간, 10분 5초 후에 사용해야 합니다.

다시 한 번 당신이 가지고 있다고 가정합니다.x초...

  • 시간은 다음과 같습니다.trunc(x / 60 / 60)
  • 분 수는 다음과 같습니다.trunc((x - ( trunc(x / 60 / 60) * 60 * 60 )) / 60)
  • 따라서 초 수는 다음과 같습니다.x - hours * 60 * 60 - minutes * 60

다음과 같은 이점 제공:

with hrs as (
  select x, trunc(x / 60 / 60) as h
    from dual
         )
 , mins as (
  select x, h, trunc((x - h * 60 * 60) / 60) as m
    from hrs
         )
select h, m, x - (h * 60 * 60) - (m * 60)
  from mins

시연할 SQL Fiddle을 설정했습니다.

다음은 또 다른 방법(tm)입니다. 여전히 약간의 계산을 포함하지만 EXTRUCT를 사용하여 간격에서 개별 필드를 끌어내는 예를 제공합니다.

DECLARE 
  SUBTYPE BIG_INTERVAL IS INTERVAL DAY(9) TO SECOND;

  i        BIG_INTERVAL;
  nSeconds NUMBER := 86400000;

  FUNCTION INTERVAL_TO_HMS_STRING(inv IN BIG_INTERVAL)
    RETURN VARCHAR2
  IS
    nHours    NUMBER;
    nMinutes  NUMBER;
    nSeconds  NUMBER;
    strHour_format  VARCHAR2(10) := '09';
    workInv   INTERVAL DAY(9) TO SECOND(9);
  BEGIN
    nHours := EXTRACT(HOUR FROM inv) + (EXTRACT(DAY FROM inv) * 24);
    strHour_format := TRIM(RPAD(' ', LENGTH(TRIM(TO_CHAR(ABS(nHours)))), '0') || '9');

    nMinutes := ABS(EXTRACT(MINUTE FROM inv));
    nSeconds := ABS(EXTRACT(SECOND FROM inv));

    RETURN TRIM(TO_CHAR(nHours, strHour_format)) || ':' ||
           TRIM(TO_CHAR(nMInutes, '09')) || ':' ||
           TRIM(TO_CHAR(nSeconds, '09'));
  END INTERVAL_TO_HMS_STRING;

BEGIN
  i := NUMTODSINTERVAL(nSeconds, 'SECOND');

  DBMS_OUTPUT.PUT_LINE('i (fields) = ' || INTERVAL_TO_HMS_STRING(i));
END;

필드 등을 추출하는 코드는 데이 필드를 동등한 시간으로 변환하기 위한 계산을 여전히 포함해야 하며, 가장 예쁘지는 않지만 사용하기에 나쁘지 않은 절차로 깔끔하게 마무리됩니다.

공유하고 즐기세요.

당신의 시간이 아래의 st.etime으로 불리고 초 단위로 저장된다고 가정하면, 제가 사용하는 것은 다음과 같습니다.이는 초수가 8,6399초(오후 11:59:59)를 초과하는 시간을 처리합니다.

st.etime > 86399인 경우 _char(to_date(st.etime - 86400, 'ssss')','HH24:MI:SS') 또는 _char(to_date(st.time, 'sssss')로,'HH24:MI:SS') readable_time 종료

내 버전.DDD HHH MMMSS 형식으로 Oracle DB 가동 시간 표시

select to_char(trunc((((86400*x)/60)/60)/24)) || 'd ' ||
   to_char(trunc(((86400*x)/60)/60)-24*(trunc((((86400*x)/60)/60)/24)), 'FM00') || 'h ' ||
   to_char(trunc((86400*x)/60)-60*(trunc(((86400*x)/60)/60)), 'FM00') || 'm ' ||
   to_char(trunc(86400*x)-60*(trunc((86400*x)/60)), 'FM00') || 's' "UPTIME"
 from (select (sysdate - t.startup_time) x from V$INSTANCE t);

Oracle 9/10을 사용한 날짜/시간 산술의 아이디어

분을 시로 변환:분:초 형식

SELECT 
   TO_CHAR(TRUNC((MINUTES * 60) / 3600), 'FM9900') || ':' ||
   TO_CHAR(TRUNC(MOD((MINUTES * 60), 3600) / 60), 'FM00') || ':' ||
   TO_CHAR(MOD((MINUTES * 60), 60), 'FM00') AS MIN_TO_HOUR FROM DUAL

24시간 이상 동안 다음 쿼리가 포함된 날짜를 포함할 수 있습니다.반환되는 형식은 다음과 같습니다.days:hh24:mi:ss

예:
select trunc(trunc(sysdate) + numtodsinterval(9999999, 'second')) - trunc(sysdate) || ':' || to_char(trunc(sysdate) + numtodsinterval(9999999, 'second'), 'hh24:mi:ss') from dual;

력출:
115:17:46:39

create or replace procedure mili(num in number)
as
yr number;
yrsms number;
mon number;
monsms number;
wk number;
wksms number;
dy number;
dysms number;
hr number;
hrsms number;
mn number;
mnsms number;
sec number;
begin 
yr := FLOOR(num/31556952000);
yrsms := mod(num, 31556952000);
mon := FLOOR(yrsms/2629746000);
monsms := mod(num,2629746000);
wk := FLOOR(monsms/(604800000));
wksms := mod(num,604800000); 
dy := floor(wksms/ (24*60*60*1000));
dysms :=mod(num,24*60*60*1000);
hr := floor((dysms)/(60*60*1000));
hrsms := mod(num,60*60*1000);
mn := floor((hrsms)/(60*1000));
mnsms := mod(num,60*1000);
sec := floor((mnsms)/(1000));
dbms_output.put_line(' Year:'||yr||' Month:'||mon||' Week:'||wk||' Day:'||dy||' Hour:'||hr||' Min:'||mn||' Sec: '||sec);
end;
/


begin 
mili(12345678904234);
end;
create or replace function `seconds_hh_mi_ss` (seconds in number)     
return varchar2
is
hours_var number;    
minutes_var number;    
seconds_var number;    
remeinder_var number;    
output_var varchar2(32);    
begin    
select seconds - mod(seconds,3600) into hours_var from dual;    
select seconds - hours_var into remeinder_var from dual;    
select (remeinder_var - mod(remeinder_var,60)) into minutes_var from dual;    
select seconds - (hours_var+minutes_var) into seconds_var from dual;    
output_var := hours_var/3600||':'||minutes_var/60||':'||seconds_var;    
return(output_var);    
end;
/

당신은 이 사이트를 확인해야 합니다.TO_TIM 스탬프 섹션이 유용할 수 있습니다!

구문:

TO_TIMESTAMP ( string , [ format_mask ] [ 'nlsparam' ] )

언급URL : https://stackoverflow.com/questions/11003918/oracle-convert-seconds-to-hoursminutesseconds

반응형