Oracle
 sql >> база данни >  >> RDS >> Oracle

Получаване на секунди между две времеви марки на Oracle

„Най-добра практика“

Каквото и да правите, обвийте го във функция, напр. seconds_between (from_date, to_date) - няма значение как го прави (изберете най-ефективния метод) - тогава ще бъде напълно очевидно какво прави вашият код.

Ефективност

Тествах двата метода на 11gR1 на моя лаптоп (WinXP) с тестовия случай по-долу. Изглежда опцията CAST е най-бързата. (t1 е базовата линия, t2 използва extract метод, t3 използва cast метод)

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

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

Тестов скрипт

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. Преобразуване на голям CLOB обект в .NET низ за поставяне в клетка DataGridView

  2. Мога ли да свържа връзки към база данни в Oracle?

  3. NEW_TIME() Функция в Oracle

  4. Отворете SQL Developer от командния ред с параметри (connectstring, user, passwort...)

  5. Низ за връзка на Oracle без файл tnsnames.ora