18

指定された合計秒数の値から、ユーザーの利用可能な時間を時間:分:秒の形式で表示する必要があります。同じことを行う ORACLE 関数を知っている場合は、感謝します。オラクルを使用しています。

お時間をいただきありがとうございます。

4

14 に答える 14

35

これを試してください。非常にシンプルで使いやすい

select to_char(to_date(10000,'sssss'),'hh24:mi:ss') from dual;
于 2012-10-23T12:43:52.227 に答える
35

特定の秒数を 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秒数です。

于 2012-06-12T21:04:41.843 に答える
8

次のコードはそれほど複雑ではなく、同じ結果になります。「X」は、時間に変換される秒数であることに注意してください。

オラクルでは、次のように使用します。

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

SqlServer では次を使用します。

SELECT CONVERT(varchar, DATEADD(s, X, 0), 108);
于 2015-06-18T19:48:44.210 に答える
2

vogash の回答に対するコメントについては、24 時間を超える可能性があるため、タイム カウンターのようなものが必要であることを理解しています。このために、次のことができます。

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

xxxあなたの秒数です。

最初の部分は時間を累積し、2 番目の部分は残りの分と秒を計算します。たとえば、それを持っ150023 secondsていると が得られます41:40:23

86000 secondsただし、 (1 日)より多くの時間がある場合でも常に hh24:mi:ss が必要な場合は、次のようにします。

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

xxxあなたの秒数です。

たとえば86402 seconds、時刻を にリセットし00:00:02ます。

于 2015-02-06T10:09:05.297 に答える
2

fe 1 分 (秒単位) を含む変数がある場合は、それを systimestamp に追加し、to_char を使用してそこから異なる時間部分を選択できます。

select to_char(systimestamp+60/(24*60*60), 'yyyy.mm.dd HH24:mi:ss') from dual
于 2012-06-12T20:13:19.737 に答える
1

あなたの時間が以下で st.etime と呼ばれ、秒単位で保存されていると仮定すると、これが私が使用するものです。これは、秒が 86399 秒 (午後 11:59:59) よりも大きい時間を処理します。

case when st.etime > 86399 then to_char(to_date(st.etime - 86400,'sssss'),'HH24:MI:SS') else to_char(to_date(st.etime,'sssss'),'HH24:MI: SS') 読み取り可能な時間の終了

于 2014-09-18T16:39:14.090 に答える
1

以下は、Yet Another Way (tm) です。まだ少し計算が含まれていますが、EXTRACT を使用して INTERVAL から個々のフィールドを引き出す例を示しています。

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;

フィールドなどを抽出するコードには、DAY フィールドを同等の時間に変換するための計算が含まれている必要があります。

共有してお楽しみください。

于 2012-06-13T11:52:57.897 に答える
1

私のバージョン。Oracle DB のアップタイムを DDd HHh MMm SSs の形式で表示します

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による日付/時刻演算からのアイデア

于 2015-06-25T13:10:58.327 に答える
1

残念ながらそうではありません... ただし、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 秒の場合は、 を使用する必要がありますtrunc

もう一度、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をセットアップしました。

于 2012-06-12T20:19:44.707 に答える
0

分を時:分:秒形式に変換する

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
于 2016-02-29T12:35:42.110 に答える
-1
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;
/
于 2013-11-14T08:10:26.437 に答える
-3

このサイトをチェックしてください。TO_TIMESTAMP セクションは役に立つかもしれません!

構文:

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

于 2012-06-12T20:06:50.780 に答える