sql >> Database teknologi >  >> RDS >> Oracle

Få sekunder mellem to Oracle-tidsstempler

"Bedste praksis"

Uanset hvad du gør, så pak den ind i en funktion, f.eks. seconds_between (from_date, to_date) - lige meget hvordan det gør det (vælg den mest effektive metode) - så vil det være helt indlysende, hvad din kode gør.

Ydeevne

Jeg testede de to metoder på 11gR1 på min bærbare computer (WinXP) med nedenstående testcase. Det ser ud til, at CAST-indstillingen er den hurtigste. (t1 er baseline, t2 brugte extract metode, brugte t3 cast metode)

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

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

Testscript

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. Sikkerhedskopier og gendan FILESTREAM-aktiveret database

  2. Skift en eksisterende kolonne til en beregnet kolonne i SQL Server (T-SQL-eksempel)

  3. PIG UDF i JAVA ERROR 1070

  4. SQL-OPDATERING i en SELECT-rang over partitionssætning