Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mendapatkan detik antara dua Oracle Timestamps

"Praktik Terbaik"

Apa pun yang Anda lakukan, bungkus dalam suatu fungsi, mis. seconds_between (from_date, to_date) - tidak masalah bagaimana melakukannya (pilih metode yang paling efisien) - maka akan sangat jelas apa yang dilakukan kode Anda.

Kinerja

Saya menguji dua metode pada 11gR1 di laptop saya (WinXP) dengan test case di bawah ini. Tampaknya opsi CAST adalah yang tercepat. (t1 adalah garis dasar, t2 menggunakan extract metode, t3 menggunakan cast metode)

t1 (nothing) 3
t2 (extract) 338
t3 (cast)    101

t1 (nothing) 3
t2 (extract) 336
t3 (cast)    100

Skrip uji

declare
 x TIMESTAMP := SYSTIMESTAMP;
 y TIMESTAMP := TRUNC(SYSDATE);
 n PLS_INTEGER;
 lc CONSTANT PLS_INTEGER := 1000000;
 t1 PLS_INTEGER;
 t2 PLS_INTEGER;
 t3 PLS_INTEGER;
begin
 t1 := DBMS_UTILITY.get_time;
 for i in 1..lc loop
  n := i;
 end loop;
 t1 := DBMS_UTILITY.get_time - t1;
 t2 := DBMS_UTILITY.get_time;
 for i in 1..lc loop
  n := extract(day from (x-y))*24*60*60
     + extract(hour from (x-y))*60*60
     + extract(minute from (x-y))*60
     + extract(second from (x-y));
 end loop;
 t2 := DBMS_UTILITY.get_time - t2;
 t3 := DBMS_UTILITY.get_time;
 for i in 1..lc loop
  n := ( CAST( x AS DATE ) - CAST( y AS DATE ) ) * 86400;
 end loop;
 t3 := DBMS_UTILITY.get_time - t3;
 dbms_output.put_line('t1 (nothing) ' || t1);
 dbms_output.put_line('t2 (extract) ' || t2);
 dbms_output.put_line('t3 (cast)    ' || t3);
end;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL menempatkan nilai kolom dalam satu baris

  2. Rollback tidak berfungsi di Oracle menggunakan liquibase

  3. Masukkan beberapa baris dari R Dataframe ke Oracle Database

  4. Tentang Elemen Format V di Oracle

  5. kesulitan membuat header menggunakan spool di sqlplus