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

Oracle 24 घंटे से अधिक प्रदर्शित करता है

आपको समय के अंतर को इसके घटक दिन, घंटे, मिनट और दूसरे तत्वों में अलग करना होगा, दिनों की संख्या * 24 को घंटों की संख्या के साथ जोड़ना होगा, और इसे वापस एक साथ रखना होगा।

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

with y as (
  select id, end_time - start_time as runtime
  from mytable
)
select id,
  runtime,
  trunc(runtime) as days,
  24 * trunc(runtime) as day_hours,
  trunc(24 * mod(runtime, 1)) as hours,
  trunc(60 * mod(24 * (runtime), 1)) as minutes,
  trunc(60 * mod(24 * 60 * (runtime), 1)) as seconds,
  lpad(24 * trunc(runtime)
    + trunc(24 * mod(runtime, 1)), 2, '0')
    ||':'|| lpad(trunc(60 * mod(24 * (runtime), 1)), 2, '0')
    ||':'|| lpad(trunc(60 * mod(24 * 60 * (runtime), 1)), 2, '0')
    as runtime
from y;

        ID    RUNTIME       DAYS  DAY_HOURS      HOURS    MINUTES    SECONDS RUNTIME 
---------- ---------- ---------- ---------- ---------- ---------- ---------- --------
         1 .184918981          0          0          4         26         16 04:26:16 
         2 1.14465278          1         24          3         28         18 27:28:18 

आप गणना के लिए तिथियों को टाइमस्टैम्प में भी बदल सकते हैं, जो आपको एक अंतराल प्रकार देता है, और फिर extract का उपयोग करें इसके बजाय तत्व प्राप्त करने के लिए कार्य करें; हालांकि प्रिंसिपल वही है:

with y as (
  select id,
    cast(end_time as timestamp) - cast (start_time as timestamp) as runtime
  from mytable
)
select id,
  runtime,
  extract (day from runtime) as days,
  24 * extract (day from runtime) as day_hours,
  extract (hour from runtime) as hours,
  extract (minute from runtime) as minutes,
  extract (second from runtime) as seconds,
  lpad(24 * extract (day from runtime) + extract (hour from runtime), 2, '0')
    ||':'|| lpad(extract (minute from runtime), 2, '0')
    ||':'|| lpad(extract (second from runtime), 2, '0')
    as runtime
from y;

        ID RUNTIME           DAYS  DAY_HOURS      HOURS    MINUTES    SECONDS RUNTIME 
---------- ----------- ---------- ---------- ---------- ---------- ---------- --------
         1 0 4:26:17.0          0          0          4         26         17 04:26:17 
         2 1 3:28:18.0          1         24          3         28         18 27:28:18 

या थोड़ा सा बदलाव, तिथियों से अंतर प्राप्त करना और फिर उसे एक अंतराल में परिवर्तित करना:

with y as (
  select id,
    numtodsinterval(end_time - start_time, 'DAY') as runtime
  from mytable
)
...

एसक्यूएल फिडल डेमो।




  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 के पास SQL ​​​​सर्वर के तालिका चर के बराबर है?

  2. Oracle में उपयोगकर्ता और अनुदान अनुमतियाँ कैसे बनाएँ?

  3. ओरेकल में एमओडी () फ़ंक्शन

  4. अपूर्ण पुनर्प्राप्ति के बाद डेटाबेस की जांच कैसे करें संगत है

  5. Oracle दिनांक - तिथि में वर्षों को कैसे जोड़ें