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

Oracle sqlदो तारीख के बीच घटाना

<स्ट्राइक>मुझे लगता है कि यह होमवर्क है, इसलिए कुछ संकेत...

पहले तारीखों को कभी भी varchar . के रूप में स्टोर न करें , यह आपको और अनुकूलक को सभी प्रकार की समस्याओं का कारण बनेगा।

दूसरा, Oracle की तारीख डेटाटाइप केवल दूसरी सटीकता के लिए स्टोर कर सकता है, और आपकी स्ट्रिंग में एक सेकंड के अंश हैं, इसलिए आप देख रहे हैं टाइमस्टैम्प के बजाय date . आप <के साथ अपनी स्ट्रिंग को टाइमस्टैम्प में बदल सकते हैं कोड>to_timestamp() फ़ंक्शन, एक उपयुक्त प्रारूप मास्क पास करना . ओह ठीक है, मैं उदार महसूस कर रहा हूँ:

select to_timestamp(start_date, 'DD-Mon-RR HH.MI.SS.FF9 AM') from your_table;

तीसरा, दो टाइमस्टैम्प घटाने से आपको एक अंतराल डेटा प्रकार, जिससे आपको एक पठनीय प्रारूप में अपनी इच्छित जानकारी निकालने की आवश्यकता होगी। टाइमस्टैम्प घटाव के लिए इस साइट या कहीं और खोजें, लेकिन मैं आपको यह हाल ही में बताऊंगा एक नमूने के रूप में।

औसत थोड़ा पेचीदा है, इसलिए आप उसके लिए अपने अंतराल को संख्याओं में बदलना चाह सकते हैं; पिछले प्रश्नों को फिर से खोजें, जैसे यह वाला . अंतरालों का आकार, सटीकता जिसकी आप वास्तव में परवाह करते हैं, और जिस तरह से आप आउटपुट स्वरूपित करना चाहते हैं, आदि का उस दृष्टिकोण पर कुछ असर पड़ेगा जो आप लेना चाहते हैं।

यदि आपको अनुमानित परिणाम की आवश्यकता है तो @ जोआचिम इसाकसन का उत्तर आपको वह देगा - गोल करने के कारण 'अनुमानित'; उदाहरण के लिए, एक सेकंड से कम की अवधि शून्य के रूप में दिखाई देगी। तारीखों पर डाली गई टाइमस्टैम्प के साथ भी यही प्रभाव देखा जा सकता है, जो आंशिक सेकंड भी खो देता है:

select 24*60*60*avg(
    cast(to_timestamp(step_ending_time, 'DD-Mon-RR HH.MI.SS.FF9 AM') as date)
        - cast(to_timestamp(step_starting_time, 'DD-Mon-RR HH.MI.SS.FF9 AM') as date)
    ) as avg_duration
from process_audit;

टाइमस्टैम्प के विभिन्न घटकों को निकालकर एक अधिक सटीक उत्तर पाया जा सकता है, जैसा कि मैंने पहले से जुड़े एक प्रश्न में किया था। आपको उन सभी की आवश्यकता नहीं हो सकती है यदि आप जानते हैं कि आपकी अवधि हमेशा एक घंटे से कम होती है, लेकिन यदि आपको एक से अधिक की आवश्यकता होती है (यानी यदि अवधि एक मिनट से अधिक हो सकती है) तो मध्यवर्ती सामान्य तालिका अभिव्यक्ति का उपयोग चीजों को सरल बनाता है बिट:

with cte as (
    select to_timestamp(step_ending_time, 'DD-Mon-RR HH.MI.SS.FF9 AM')
        - to_timestamp(step_starting_time, 'DD-Mon-RR HH.MI.SS.FF9 AM') as duration
    from process_audit
)
select avg(extract(second from duration)
    + extract(minute from duration) * 60
    + extract(hour from duration) * 60 * 60
    + extract(day from duration) * 60 * 60 * 24) as avg_duration
from cte;

दो नमूना पंक्तियों के साथ, एक ठीक एक सेकंड के अंतराल के साथ और एक ठीक 1.5 सेकंड के साथ, यह परिणाम देता है 1.25



  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 क्लाइंट ORA-12541:TNS:कोई श्रोता नहीं

  4. क्या ऑरैकल अप्रतिबद्ध पठन विकल्प की अनुमति देता है?

  5. Oracle LISTAGG फ़ंक्शन का उपयोग कैसे करें