Jak zmierzyć czas w różnych jednostkach czasu (sekundy, minuty, godziny, dni) ?


Moje ostatnie zmagania z mierzeniem czasu można prześledzić w postach

Także podsumowując: jeśli chcemy zmierzyć czas a w zasadzie różnicę czasu możemy skorzystać z typu danych TIMESTAMP dla większej dokładności lub typu danych DATE, jeśli dokładność w sekundach jest satysfakcjonująca.

W poniższym skrypcie wyliczamy różnicę czasu między start_date i end_date, która dla przykladu wynosi 4 minuty i przedstawiamy ją w różnych jednostkach:  sekundach, minutach, godzinach i dniach
 with daty (start_tmstp, end_tmstp, start_date, end_date) as (  
  select to_timestamp(to_char(sysdate, 'yyyymmddhh24miss'),'YYYYMMDDHH24MISS.FF'),   
      to_timestamp(to_char(sysdate- 4/1440, 'yyyymmddhh24miss'),'YYYYMMDDHH24MISS.FF'),  
      sysdate, sysdate- 4/1440 from dual  
 )  
 select   
  --- czas dla typ danych TIMESTAMP  
  to_char(round(extract( day from(start_tmstp - end_tmstp )*24*60*60*100)/100,2), '99990D00') czas_tmstp_sec,  
  to_char(round(extract( day from(start_tmstp - end_tmstp )*24*60 *100)/100,2), '99990D00') czas_tmstp_min,  
  to_char(round(extract( day from(start_tmstp - end_tmstp )*24 *100)/100,2), '99990D00') czas_tmstp_godz,  
  to_char(round(extract( day from(start_tmstp - end_tmstp )*100)/100,2), '99990D00') czas_tmstp_dni,  
  --- czas dla typ danych DATE  
  (start_date - end_date)* 24 *60 *60  czas_dt_sec,  
  (start_date - end_date)* 24 *60  czas_dt_min,  
  round((start_date - end_date)* 24,2) czas_dt_godz,  
  round((start_date - end_date) ,2) czas_dt_dni  
 from daty  
 ;  
Jak widać sposób jest bardzo prosty. W pierwszym kroku wyliczamy różnicę między datami jako timestamp lub date a następnie za pomocą mnożenia przeliczamy na oczekiwane przez nas jednostki:
- bez mnożenia - czas przedstawimy w DNIACH
- * 24 - czas przedstawimy GODZINACH
- * 24 * 60 - czas przedstawimy w MINUTACH
- * 24 * 60 * 60 - czas przedstawimy w SEKUNDACH

Komentarze