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

Oracle में दो साल के महीने और दिन के मूल्यों के बीच अंतर

जब आप इसके बारे में पूरी तरह से सोचते हैं, तो आप महसूस करेंगे कि आप दो "समय अंतराल" के अंतर की गणना नहीं कर सकते हैं, जब महीने होते हैं; केवल इसलिए कि महीनों के घटाव का परिणाम अलग-अलग दिनों में हो सकता है। आप वर्ष घटा सकते हैं, आप सप्ताह घटा सकते हैं, आप दिन घटा सकते हैं,... आप दिन-से-सेकंड घटा सकते हैं, आप साल-दर-महीने घटा सकते हैं। हालांकि, आप साल-दर-दिन घटा नहीं सकते।

उदाहरण:

SQL> select timestamp'1915-07-23 00:00:00' - timestamp'1907-09-12 00:00:00' as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000002871 00:00:00

1 जनवरी 1900 के आधार पर यह आपका 15 साल, 7 महीने, 23 दिन घटा 7 साल, 9 महीने, 12 दिन है। इससे हमें 2871 दिनों का अंतर मिला।

हालांकि, निम्नलिखित दो उदाहरणों पर विचार करें, जिन्हें केवल 1 और 6 महीने पहले स्थानांतरित कर दिया गया है

select timestamp'1915-06-23 00:00:00' - timestamp'1907-08-12 00:00:00' as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000002872 00:00:00

select timestamp'1915-01-23 00:00:00' - timestamp'1907-03-12 00:00:00' as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000002874 00:00:00

SQL> 

इनसे अब हमें 2872 और 2874 दिनों का अंतर मिला है।

अब, संभावित घटावों की बात करें...

(a) साल-दर-महीने के अंतराल को घटाना

SQL> select interval'1915-07' year(4) to month - interval'1907-09' year(4) to month as diff_year_to_month_interval from dual;

DIFF_YEAR_TO_MONTH_INTERVAL
---------------------------
+000000007-10

select interval'1915-06' year(4) to month - interval'1907-08' year(4) to month as diff_year_to_month_interval from dual;

DIFF_YEAR_TO_MONTH_INTERVAL
---------------------------
+000000007-10

select interval'1915-01' year(4) to month - interval'1907-03' year(4) to month as diff_year_to_month_interval from dual;

DIFF_YEAR_TO_MONTH_INTERVAL
---------------------------
+000000007-10

SQL> 

तीनों सही ढंग से 7 साल और 10 महीने का अंतर पैदा करते हैं।

(b) दिन-दर-सेकंड अंतराल घटाना

SQL> select interval'15 01:02:03' day(2) to second - interval'07 02:03:04' day(2) to second as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000000007 22:58:59

select interval'14 00:01:02' day(2) to second - interval'06 01:02:03' day(2) to second as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000000007 22:58:59

select interval'09 11:12:13' day(2) to second - interval'01 12:13:14' day(2) to second as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000000007 22:58:59

SQL> 

तीनों एक ही परिणाम उत्पन्न करते हैं, क्योंकि तीनों दिन-से-सेकंड अंतराल के घटाव हैं और अंतराल मानों के दिन/घंटे/मिनट/सेकंड भागों की लगातार ऑफसेटिंग करते हैं।

(c) साल-दर-दिन अंतराल घटाना

जैसा कि मैंने कहा:संभव नहीं है। Oracle में साल-दर-दिन अंतराल जैसी कोई चीज़ भी नहीं होती है; डीबी सर्वर के निर्माताओं को पता था कि उन्होंने उन्हें इंजन में नहीं जोड़ने का फैसला क्यों किया।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर रिपोर्टिंग सेवाओं में Oracle दिनांक प्रारूप अपवाद

  2. प्रति लूप CSV फ़ाइल बनाना | पीएलएसक्यूएल ओरेकल एसक्यूएल डेवलपर

  3. Oracle में SQL क्वेरी से लौटाए गए रिकॉर्ड को सीमित करना

  4. Oracle शेड्यूलर में INTERVAL=0 का क्या अर्थ है?

  5. SQL में एक टेबल को पिवोटिंग करना (यानी क्रॉस टेबुलेशन/क्रॉसस्टैब्यूलेशन)