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

oracle sql में दो तिथियों के बीच बीता हुआ समय ज्ञात करें

जब आप दो DATE घटाते हैं enddate - startdate . जैसे मान आपको दशमलव सटीकता के साथ दिनों में अंतर मिलता है, इसलिए उदाहरण के लिए 1.5 का अर्थ 1 1/2 दिन या 36 घंटे होगा। आप इसे HH:MI:SS . में बदल सकते हैं बहुत सारे गणित का उपयोग करते हुए, लेकिन एक आसान तरीका यह है कि दशमलव मान को INTERVAL DAY TO SECOND में बदल दिया जाए। NUMTODSINTERVAL का उपयोग करके मान समारोह:

  NUMTODSINTERVAL(enddate - startdate, 'DAY')

आपको लगता है कि TO_CHAR फ़ंक्शन इसे HH:MI:SS . के रूप में प्रारूपित करने में सक्षम होगा , लेकिन यह उस तरह से काम नहीं कर रहा है। आप EXTRACT . का उपयोग कर सकते हैं इसके बजाय, और TO_CHAR यह सुनिश्चित करने के लिए कि आपको अग्रणी शून्य मिले:

 TO_CHAR(EXTRACT(HOUR FROM NUMTODSINTERVAL(enddate-startdate, 'DAY')), 'FM00')
   || ':' ||
 TO_CHAR(EXTRACT(MINUTE FROM NUMTODSINTERVAL(enddate-startdate, 'DAY')), 'FM00')
   || ':' ||
 TO_CHAR(EXTRACT(SECOND FROM NUMTODSINTERVAL(enddate-startdate, 'DAY')), 'FM00')

00 प्रारूप कोड का हिस्सा दो अंकों को निर्दिष्ट करता है, यदि आवश्यक हो तो एक अग्रणी शून्य के साथ। FM भाग स्वरूपित परिणाम में अग्रणी स्थान से छुटकारा पाता है, जो कि यदि आवश्यक हो तो एक नकारात्मक संकेत के लिए आरक्षित है।

यह भी ध्यान दें कि आपकी क्वेरी को समग्र मान मिलते हैं और उनका उपयोग उसी SELECT . में किया जाता है सूची। Oracle आपको ऐसा नहीं करने देगा। इसके बजाय कुछ इस तरह का प्रयास करें:

WITH StartEndByID AS (
  SELECT
    msglog.id,
    NUMTODSINTERVAL(max(msglog.timestamp) - min(msglog.timestamp), 'DAY') elapsed
  FROM messagelog msglog
  GROUP BY id
)
SELECT
  id,
  TO_CHAR(EXTRACT(HOUR FROM elapsed), 'FM00') || ':' ||
    TO_CHAR(EXTRACT(MINUTE FROM elapsed), 'FM00') || ':' ||
    TO_CHAR(EXTRACT(SECOND FROM elapsed), 'FM00') AS ElapsedHHMISS
FROM StartEndByID


  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 11.1 बग जूलियन दिन संख्या को DATE या TIMESTAMP में परिवर्तित कर रहा है

  2. %ROWTYPE . के साथ कर्सर मान कैसे प्राप्त करें

  3. Oracle में स्तंभों के लिए अल्पविराम से अलग किए गए मानों को विभाजित करें

  4. pl/sql में अपवाद हैंडलिंग

  5. केस स्टेटमेंट के ELSE में सेलेक्ट का उपयोग करने से मुझे ORA-00937 मिलता है:सिंगल-ग्रुप ग्रुप फंक्शन नहीं