आप CONNECT BY
. का उपयोग करके एक साधारण पंक्ति निर्माण तकनीक का उपयोग कर सकते हैं वाक्य रचना:
with sample_data as
(select 'XXA' id, to_date('1/23/14','MM/DD/RR') start_date, to_date('3/12/14','MM/DD/RR') end_date from dual)
select id, to_char(add_months(start_date,level - 1),'Month YYYY') date_column
from sample_data
connect by level <= extract(month from end_date) - extract(month from start_date) + 1;
संपादित करें DISTINCT
जोड़ना इसे सभी पंक्तियों में काम करने देना चाहिए, मेरा मानना है, हालांकि मुझे गलत साबित होने में दिलचस्पी होगी।संपादित करें 2 कई वर्षों को संभालने के लिए संशोधित उदाहरण (मूल रूप से ऐसा करना चाहिए था)। (उदाहरण देखें http://sqlfiddle.com/#!4/9eecb/4097/ 0
।)
with sample_data as
( select 'XXA' id, to_date('1/23/14','MM/DD/RR') start_date, to_date('3/12/15','MM/DD/RR') end_date from dual union all
select 'XXB' id, to_date('4/12/14','MM/DD/RR') start_date, to_date('6/18/15','MM/DD/RR') end_date from dual )
select distinct
id,
to_char(add_months(start_date,level - 1),'Month YYYY') date_column,
add_months(start_date,level -1) sortkey
from sample_data
connect by level <= ceil(months_between(trunc(end_date,'MM'), trunc(start_date,'MM'))) + 1
order by id, sortkey;
मेरे सैंडबॉक्स डीबी में यह उत्पन्न होता है:
ID DATE_COLUMN SORT_COL
XXA January 2014 23-JAN-2014 00:00:00
XXA February 2014 23-FEB-2014 00:00:00
XXA March 2014 23-MAR-2014 00:00:00
XXB April 2014 12-APR-2014 00:00:00
XXB May 2014 12-MAY-2014 00:00:00
XXB June 2014 12-JUN-2014 00:00:00