Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara membagi interval antara dua tanggal menjadi detail berdasarkan bulan?

Pada Oracle 12c cross apply klausa dapat digunakan:

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. Cara mendeklarasikan kursor setelah bagian awal dari prosedur Oracle PL/SQL

  2. Bagaimana cara mendapatkan daftar bulan antara 2 tanggal yang diberikan menggunakan kueri?

  3. Oracle UTL_FILE membaca baris file CSV

  4. PLS-00306:nomor atau jenis argumen yang salah dalam panggilan ke

  5. Melarikan diri dari karakter kontrol di Oracle XDB