Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Nhận giây giữa hai Dấu thời gian Oracle

"Phương pháp hay nhất"

Dù bạn làm gì, hãy gói nó trong một hàm, ví dụ:seconds_between (from_date, to_date) - không quan trọng nó hoạt động như thế nào (chọn phương pháp hiệu quả nhất) - sau đó sẽ hoàn toàn rõ ràng mã của bạn đang làm gì.

Hiệu suất

Tôi đã thử nghiệm hai phương pháp trên 11gR1 trên máy tính xách tay của mình (WinXP) với trường hợp thử nghiệm bên dưới. Có vẻ như tùy chọn CAST là nhanh nhất. (t1 là đường cơ sở, t2 sử dụng extract , t3 đã sử dụng cast phương pháp)

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

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

Tập lệnh thử nghiệm

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. Thay đổi định nghĩa TYPE trong Oracle 21c

  2. SQL Developer 4.1.3 đã được phát hành

  3. làm thế nào chúng ta có thể nhóm 5 giờ chiều hôm qua thành 5 giờ chiều hôm nay ghi thành ngày hôm nay

  4. Mệnh đề SQL IN 1000 giới hạn mục

  5. CLOB so với VARCHAR2 và có những lựa chọn thay thế nào khác không?