ओरेकल 10 जी में मेरे पास एक सारणी है जिसमें टाइमस्टैम्प होते हैं जो दिखाते हैं कि कुछ संचालन कितने समय तक लेते थे। इसमें दो टाइमस्टैम्प फ़ील्ड हैं: स्टार्टटाइम और एंडटाइम। मैं इन टाइमस्टैम्प द्वारा दी गई अवधि के औसत ढूंढना चाहता हूं। मैं कोशिश:समय अंतराल औसत कैसे करें?
select avg(endtime-starttime) from timings;
लेकिन मिलती है:
SQL Error: ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL DAY TO SECOND
यह काम करता है:
select
avg(extract(second from endtime - starttime) +
extract (minute from endtime - starttime) * 60 +
extract (hour from endtime - starttime) * 3600) from timings;
लेकिन वास्तव में धीमी है।
अंतराल को सेकंड की संख्या में बदलने का कोई बेहतर तरीका, या कोई अन्य तरीका यह करता है?
संपादित करें: वास्तव में यह धीमा कर रहा था यह तथ्य था कि मेरे पास स्टार्टटाइम से पहले कुछ अंतराल था। किसी कारण से इस गणना को अविश्वसनीय रूप से धीमा कर दिया। मेरी अंतर्निहित समस्या को क्वेरी सेट से हटाकर हल किया गया था।
FUNCTION fn_interval_to_sec (i IN INTERVAL DAY TO SECOND)
RETURN NUMBER
IS
numSecs NUMBER;
BEGIN
numSecs := ((extract(day from i) * 24
+ extract(hour from i))*60
+ extract(minute from i))*60
+ extract(second from i);
RETURN numSecs;
END;
ध्यान दें कि [कस्टम पीएल/एसक्यूएल कार्यों में महत्वपूर्ण प्रदर्शन ओवरहेड है] (https://asktom.oracle.com/pls/apex/f?p=100:11TP:::P11_QUESTION_ID:60122715103602) जो हो सकता है भारी पूछताछ के लिए उपयुक्त है। – Vadzim