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

महीने के हिसाब से दो तिथियों के बीच के अंतराल को विवरण में कैसे विभाजित करें?

Oracle 12c पर cross apply खंड का उपयोग किया जा सकता है:

create table e_vents(
 name varchar2(10),
 startdate date,
 enddate date
);

insert all 
into e_vents values( 'A', date '2017-12-15', date '2018-01-17' )
into e_vents values( 'B', date '2017-12-15', date '2017-12-22' )
into e_vents values( 'C', date '2017-12-15', date '2018-05-22' )
select null from dual;

commit;
select e.name,
       case when e.startdate > x.s_date then e.startdate else x.s_date end as start_date,
       case when e.enddate < x.e_date then e.enddate else x.e_date end as end_date
from e_vents e
cross apply (
  select 
         trunc( e.startdate, 'mm') + (level-1) * interval '1' month as s_date,
         trunc( e.startdate + (level) * interval '1' month, 'mm') -1 as e_date 
  from dual
  connect by level <= months_between( trunc( e.enddate, 'mm'),trunc( e.startdate, 'mm')) + 1
) x
NAME       START_DATE END_DATE        
---------- ---------- ----------
A          2017-12-15 2017-12-31
A          2018-01-01 2018-01-17
B          2017-12-15 2017-12-22
C          2017-12-15 2017-12-31
C          2018-01-01 2018-01-31
C          2018-02-01 2018-02-28
C          2018-03-01 2018-03-31
C          2018-04-01 2018-04-30
C          2018-05-01 2018-05-22

9 rows selected. 


  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 के SEQUENCE.NEXTVAL के बराबर MySQL

  2. मैं ऑरैकल में वर्कर 2 के रूप में पैरामीटर कैसे निकाल सकता हूं?

  3. ओरेकल पीएल/एसक्यूएल - संग्रहीत प्रक्रिया प्रदर्शन के लिए NO_DATA_FOUND अपवाद खराब हैं?

  4. Oracle संग्रहित प्रक्रिया में त्रुटि कोड का वापसी संदेश

  5. पीएल/एसक्यूएल, स्ट्रिंग में सिंगल कोट से कैसे बचें?