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

Oracle पुनरावर्ती क्वेरी - तिथियाँ

आपके पास अभी जो समस्या है (अतिरिक्त cast() . के अलावा) और to_date() कॉल) यह है कि चौथे पुनरावृत्ति पर दोनों स्थितियां झूठी हैं इसलिए रिकर्सन बंद हो जाता है; इसमें कुछ भी नहीं है कि इसे थोड़ा छोड़ दें और फिर से उठाएं, अन्यथा यह हमेशा के लिए जारी रहेगा। मुझे नहीं लगता कि आप रिकर्सन के भीतर दोनों श्रेणियों को प्राप्त कर सकते हैं।

आप अपनी इच्छित नवीनतम तिथि को पुनरावर्ती भाग के अंदर रख सकते हैं, और फिर बाद में अपनी इच्छित दो श्रेणियों को फ़िल्टर कर सकते हैं:

WITH CTE_Dates (cte_date)  AS (
    SELECT date '2014-01-27'  from dual
    UNION ALL
    SELECT ADD_MONTHS(TRUNC(cte_date, 'MONTH'), 1)
    FROM CTE_Dates
    WHERE ADD_MONTHS(TRUNC(cte_date, 'MONTH'), 1) <= date '2015-01-27'
)
SELECT * from CTE_Dates
WHERE cte_date BETWEEN date '2014-01-27' AND date '2014-04-27'
OR cte_date BETWEEN date '2014-11-27' AND date '2015-01-27';

CTE_DATE 
---------
27-JAN-14 
01-FEB-14 
01-MAR-14 
01-APR-14 
01-DEC-14 
01-JAN-15 

 6 rows selected 

आप हार्ड-कोडेड मानों को अपने प्रारंभ और समाप्ति तिथियों के जोड़े से बदल सकते हैं। यदि श्रेणियां ओवरलैप हो सकती हैं या दूसरी श्रेणी पहली से पहले (या समाप्त) हो सकती है, तो आप उच्च तिथि चुन सकते हैं:

    WHERE ADD_MONTHS(TRUNC(cte_date, 'MONTH'), 1)
      <= greatest(date '2015-01-27', date '2014-04-27')

... हालांकि यह केवल चर के साथ समझ में आता है, निश्चित मान नहीं।




  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 सम्मिलित करें

  2. Oracle में प्राथमिक कुंजी कॉलम कैसे प्राप्त करें?

  3. टीएनएस:श्रोता वर्तमान में कनेक्ट डिस्क्रिप्टर में अनुरोधित सेवा के बारे में नहीं जानता है

  4. Oracle डेटाबेस में तत्काल निष्पादन के साथ ALTER और DROP तालिका DDL

  5. हम डायनामिक एसक्यूएल स्टेटमेंट के साथ मजबूत रेफ कर्सर का उपयोग क्यों नहीं कर सकते?