среда, 17 января 2024 г.

How to convert seconds to HH24:MI:SS

 First example is convert seconds to HH24:MI with using to_char:

  1. with t as (select 800000000 sec from dual)
  2. select nvl(trim(to_char(trunc(round(sec/3600, 2)), 'FM9999999900')), '00')
  3. || ':'
  4. || nvl(to_char(mod(trunc(round(sec/60, 2)), 60), 'FM00'), '00') in_hh_mi
  5. from t
  6. ;
IN_HH_MI       
---------------
222222:13      
1 row selected.

 Next example is convert seconds to HH24:MI:SS with using NUMTODSINTERVAL:

  1. with t as(select NUMTODSINTERVAL(nvl(800000000, 0) , 'second') ds_int from dual)
  2. select ds_int
  3. ,to_char(extract(day from ds_int) * 24
  4. + extract(hour from ds_int), 'FM9999999900')
  5. || ':' || to_char(extract(minute from ds_int), 'FM00')
  6. || ':' || to_char(extract(second from ds_int), 'FM00') in_hh_mi_ss
  7. 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:

  1. declare
  2. l_var varchar2(50);
  3.  
  4. function seconds_to_hh24_mi_ss(p_seconds number) return varchar2
  5. is
  6. l_ds_int INTERVAL DAY(9) TO SECOND;
  7. begin
  8. l_ds_int := NUMTODSINTERVAL(nvl(p_seconds, 0), 'second');
  9. return to_char(extract(day from l_ds_int) * 24
  10. + extract(hour from l_ds_int), 'FM9999999900') -- hh
  11. || ':' || to_char(extract(minute from l_ds_int), 'FM00') -- mi
  12. || ':' || to_char(extract(second from l_ds_int), 'FM00') -- ss
  13. ;
  14. end;
  15. begin
  16. l_var := seconds_to_hh24_mi_ss(800000000);
  17. dbms_output.put_line(l_var);
  18. end;
PL/SQL procedure successfully completed.

222222:13:20

Комментариев нет:

Отправить комментарий