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

ORACLE SQL में दिनांक कॉलम से सभी महीनों की सूची बनाएं

आपने एक टाइपो बनाया और date लिखा dates . के बजाय लेकिन आपको दूसरा परिवर्तन करने और ADD_MONTHS . का उपयोग करने की भी आवश्यकता है पुनरावर्ती क्वेरी के WHERE . में खंड या आप एक बहुत अधिक पंक्तियाँ उत्पन्न करेंगे।

WITH t1(test)  AS (
  SELECT MIN(alldates)
  FROM dates 
UNION ALL 
  SELECT ADD_MONTHS(test,1)
  FROM t1 
  WHERE ADD_MONTHS(test,1) <= (SELECT MAX(alldates) FROM dates)
)
SELECT * FROM t1

कौन सा आउटपुट:

हालांकि, एक अधिक कुशल क्वेरी एक ही क्वेरी में न्यूनतम और अधिकतम मान प्राप्त करना और फिर इन पूर्व-पाई गई सीमाओं का उपयोग करके पुनरावृति करना होगा:

WITH t1(min_date, max_date)  AS (
  SELECT MIN(alldates),
         MAX(alldates)  
  FROM   dates 
UNION ALL 
  SELECT ADD_MONTHS(min_date,1),
         max_date
  FROM   t1 
  WHERE  ADD_MONTHS(min_date,1) <= max_date
)
SELECT min_date AS month
FROM   t1

db<>fiddle यहां

अपडेट करें

Oracle 11gR2 में पुनरावर्ती दिनांक प्रश्नों को संभालने वाले बग हैं; यह बाद के Oracle संस्करणों में तय किया गया है, लेकिन यदि आप SQL Fiddle और Oracle 11gR2 का उपयोग करना चाहते हैं तो आपको एक संख्यात्मक मान पर पुनरावृति करने की आवश्यकता है, न कि किसी तिथि पर। कुछ इस तरह:

SQL Fiddle

Oracle 11g R2 स्कीमा सेटअप :

CREATE TABLE dates(
alldates date);

INSERT INTO dates  (alldates) VALUES ('1-May-2017');
INSERT INTO dates  (alldates) VALUES ('1-Mar-2018');

क्वेरी 1 :

WITH t1(min_date, month, total_months)  AS (
  SELECT MIN(alldates),
         0,
         MONTHS_BETWEEN(MAX(alldates),MIN(alldates))
  FROM   dates 
UNION ALL 
  SELECT min_date,
         month+1,
         total_months
  FROM   t1 
  WHERE  month+1<=total_months
)
SELECT ADD_MONTHS(min_date,month) AS month
FROM   t1

परिणाम :

|                MONTH |
|----------------------|
| 2017-05-01T00:00:00Z |
| 2017-06-01T00:00:00Z |
| 2017-07-01T00:00:00Z |
| 2017-08-01T00:00:00Z |
| 2017-09-01T00:00:00Z |
| 2017-10-01T00:00:00Z |
| 2017-11-01T00:00:00Z |
| 2017-12-01T00:00:00Z |
| 2018-01-01T00:00:00Z |
| 2018-02-01T00:00:00Z |
| 2018-03-01T00:00:00Z |


  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. Oracle डेटाबेस में सभी संग्रहीत प्रक्रियाओं को कैसे सूचीबद्ध करें

  4. Oracle दिनांक घटाव

  5. क्या कोई Oracle SQL क्वेरी है जो एक से अधिक पंक्तियों को एक पंक्ति में एकत्रित करती है?