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

Menghasilkan baris terpisah untuk setiap bulan dalam rentang tanggal

Anda dapat menggunakan teknik pembuatan baris sederhana dengan menggunakan CONNECT BY sintaks:

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;

Sunting Menambahkan DISTINCT harus memungkinkan ini untuk bekerja di seluruh baris, saya percaya, meskipun saya akan tertarik untuk membuktikan salah.Edit 2 Contoh yang dimodifikasi untuk menangani beberapa tahun (seharusnya melakukan itu pada awalnya). (Lihat contoh 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;

Di DB kotak pasir saya, ini menghasilkan:

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


  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 query menghasilkan pagination tanpa metode akses data TABLE FULL SCAN

  2. Kursor Untuk Loop dengan Pernyataan SQL dinamis

  3. ORA-00604 ORA-12705

  4. Perbandingan tanggal mengembalikan hasil yang tidak biasa - SQL Oracle

  5. Menggunakan GROUP BY dengan XMLCast dan XMLQuery memberikan ORA-22950