Oracle Convert Seconds to Hours:Minutes:Seconds

前端 未结 14 1184
再見小時候
再見小時候 2020-12-08 06:01

I have a requirement to display user available time in Hours:Minutes:Seconds format from a given total number of seconds value. Appreciate if you know a ORACLE function to d

14条回答
  •  一个人的身影
    2020-12-08 06:31

    The following is Yet Another Way (tm) - still involves a little calculation but provides an example of using EXTRACT to pull the individual fields out of an 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;
    

    The code which extracts the fields, etc, still has to contain a calculation to convert the DAY field to equivalent hours, and is not the prettiest, but wrapped up neatly in a procedure it's not too bad to use.

    Share and enjoy.

提交回复
热议问题