जब आप इसके बारे में पूरी तरह से सोचते हैं, तो आप महसूस करेंगे कि आप दो "समय अंतराल" के अंतर की गणना नहीं कर सकते हैं, जब महीने होते हैं; केवल इसलिए कि महीनों के घटाव का परिणाम अलग-अलग दिनों में हो सकता है। आप वर्ष घटा सकते हैं, आप सप्ताह घटा सकते हैं, आप दिन घटा सकते हैं,... आप दिन-से-सेकंड घटा सकते हैं, आप साल-दर-महीने घटा सकते हैं। हालांकि, आप साल-दर-दिन घटा नहीं सकते।
उदाहरण:
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 में साल-दर-दिन अंतराल जैसी कोई चीज़ भी नहीं होती है; डीबी सर्वर के निर्माताओं को पता था कि उन्होंने उन्हें इंजन में नहीं जोड़ने का फैसला क्यों किया।