Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

दो Oracle टाइमस्टैम्प के बीच सेकंड प्राप्त करना

"सर्वोत्तम अभ्यास"

आप जो कुछ भी करते हैं, उसे किसी फ़ंक्शन में लपेटें, उदा। seconds_between (from_date, to_date) - इससे कोई फर्क नहीं पड़ता कि यह कैसे करता है (सबसे कुशल तरीका चुनें) - तब यह पूरी तरह से स्पष्ट हो जाएगा कि आपका कोड क्या कर रहा है।

प्रदर्शन

मैंने नीचे दिए गए परीक्षण मामले के साथ अपने लैपटॉप (WinXP) पर 11gR1 पर दो विधियों का परीक्षण किया। ऐसा लगता है कि 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. Oracle अशक्त निर्धारित करें ==अशक्त

  2. डेटान्यूक्लियस + जेपीए + ओरेकल। टेबल के साथ अजीब त्रुटि मौजूद नहीं है

  3. Oracle प्राकृतिक जुड़ता है और गणना करता है(1)

  4. किसी विशिष्ट मान के लिए तालिका में केवल 3 पंक्तियों को जोड़ने की अनुमति दें

  5. ORA-00907 CHECK बाधा उत्पन्न करने का प्रयास करते समय