First example is convert seconds to HH24:MI with using to_char:
- with t as (select 800000000 sec from dual)
- select nvl(trim(to_char(trunc(round(sec/3600, 2)), 'FM9999999900')), '00')
- || ':'
- || nvl(to_char(mod(trunc(round(sec/60, 2)), 60), 'FM00'), '00') in_hh_mi
- from t
- ;
IN_HH_MI --------------- 222222:13 1 row selected.
Next example is convert seconds to HH24:MI:SS with using NUMTODSINTERVAL:
- with t as(select NUMTODSINTERVAL(nvl(800000000, 0) , 'second') ds_int from dual)
- select ds_int
- ,to_char(extract(day from ds_int) * 24
- + extract(hour from ds_int), 'FM9999999900')
- || ':' || to_char(extract(minute from ds_int), 'FM00')
- || ':' || to_char(extract(second from ds_int), 'FM00') in_hh_mi_ss
- from t;
DS_INT IN_HH_MI_SS -------------------------------------------------- ------------------- +9259 06:13:20.000000 222222:13:20 1 row selected.
Thanks to forum.oracle.com topic convert from numberic seconds to HH:MM:SS answer of michaelrozar17
Last example is pl/sql function seconds_to_hh24_mi_ss to convert seconds to HH24:MI:SS with using NUMTODSINTERVAL:
- declare
- l_var varchar2(50);
- function seconds_to_hh24_mi_ss(p_seconds number) return varchar2
- is
- l_ds_int INTERVAL DAY(9) TO SECOND;
- begin
- l_ds_int := NUMTODSINTERVAL(nvl(p_seconds, 0), 'second');
- return to_char(extract(day from l_ds_int) * 24
- + extract(hour from l_ds_int), 'FM9999999900') -- hh
- || ':' || to_char(extract(minute from l_ds_int), 'FM00') -- mi
- || ':' || to_char(extract(second from l_ds_int), 'FM00') -- ss
- ;
- end;
- begin
- l_var := seconds_to_hh24_mi_ss(800000000);
- dbms_output.put_line(l_var);
- end;
PL/SQL procedure successfully completed. 222222:13:20