Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Generowanie oddzielnych wierszy dla każdego miesiąca w zakresie dat

Możesz użyć prostej techniki generowania wierszy, używając CONNECT BY składnia:

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;

Edytuj Dodanie DISTINCT powinien pozwolić to działać w wielu wierszach, jak sądzę, chociaż chciałbym, aby udowodniono, że się mylę.Edytuj 2 Zmodyfikowany przykład do obsługi wielu lat (powinno to zrobić pierwotnie). (Zobacz przykład 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;

W mojej piaskownicy DB daje to:

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. Jak mogę połączyć ORACLE z programu EXCEL z JDBC?

  2. zdefiniowana przez użytkownika niestandardowa funkcja agregująca przy użyciu plsql

  3. Problemy z NLS_CHARACTERSET WE8ISO8859P1 i UTF8 w Oracle

  4. Oracle SQL, uzupełnij brakującą wartość najbliższym brakiem

  5. Połącz dwie tabele i znajdź nakładające się daty i luki