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

एसक्यूएल:क्या यह इंटरवल प्रकार के एसयूएम () क्षेत्रों के लिए संभव है?

मुझे डर है कि आप एक समाधान के साथ भाग्य से बाहर होने जा रहे हैं जो ओरेकल और एमएसएसक्यूएल दोनों में काम करता है। तिथि अंकगणित कुछ ऐसा है जो डीबीएमएस के विभिन्न स्वादों पर बहुत अलग है।

वैसे भी, Oracle में हम सीधे अंकगणित में तिथियों का उपयोग कर सकते हैं। और हमारे पास एक फ़ंक्शन NUMTODSINTERVAL है जो एक संख्या को एक दिन से दूसरे अंतराल में बदल देता है। तो चलिए उन्हें एक साथ रखते हैं।

साधारण परीक्षण डेटा, दो पंक्तियों के साथ तिथियों के जोड़े लगभग बारह घंटे अलग:

SQL> alter session set nls_date_format = 'dd-mon-yyyy hh24:mi:ss'
  2  /

Session altered.

SQL> select * from t42
  2  /

D1                   D2
-------------------- --------------------
27-jul-2010 12:10:26 27-jul-2010 00:00:00
28-jul-2010 12:10:39 28-jul-2010 00:00:00

SQL>

बीता हुआ समय निकालने के लिए सरल SQL क्वेरी:

SQL> select numtodsinterval(sum(d1-d2), 'DAY')
  2  from t42
  3  /

NUMTODSINTERVAL(SUM(D1-D2),'DAY')
-----------------------------------------------------
+000000001 00:21:04.999999999

SQL>

बस एक दिन से अधिक, जिसकी हम अपेक्षा करेंगे।

TIMESTAMP कॉलम के साथ काम करना थोड़ा अधिक श्रमसाध्य है, लेकिन हम अभी भी उसी ट्रिक पर काम कर सकते हैं।

निम्नलिखित नमूने में। T42T T42 के समान है, केवल कॉलम में उनके डेटाटाइप के लिए DATE के बजाय TIMESTAMP है। क्वेरी DS INTERVAL के विभिन्न घटकों को निकालती है और उन्हें सेकंड में परिवर्तित करती है, जिसे बाद में सारांशित किया जाता है और एक INTERVAL में वापस परिवर्तित किया जाता है:

SQL> select numtodsinterval(
  2              sum(
  3                  extract (day from (t1-t2)) * 86400
  4                   + extract (hour from (t1-t2)) * 3600
  5                   + extract (minute from (t1-t2)) * 600
  6                   + extract (second from (t1-t2))
  7            ), 'SECOND')
  8  from t42t
  9  /

NUMTODSINTERVAL(SUM(EXTRACT(DAYFROM(T1-T2))*86400+EXTRACT(HOURFROM(T1-T2))*
---------------------------------------------------------------------------
+000000001 03:21:05.000000000

SQL>

कम से कम यह परिणाम गोल सेकंड में है!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MERGE को क्रमबद्ध कैसे करें

  2. SQL क्वेरी के साथ Oracle स्कीमा आकार कैसे प्रदर्शित करें?

  3. ओरेकल एसक्यूएल - DENSE_RANK

  4. JDBC के माध्यम से दिन के उजाले की बचत के बिना Oracle की तारीख और समय

  5. Oracle SQL डेटाबेस में बड़ी मात्रा में डेटा लोड हो रहा है