Oracle
 sql >> база данни >  >> RDS >> Oracle

Генериране на отделни редове за всеки месец в период от време

Можете да използвате проста техника за генериране на редове, като използвате 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


  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 се компилира успешно, но извежда грешка при изпълнение на PLS-00221:не е процедура или е недефинирана

  2. Как да експортирате с помощта на DATA_PUMP в кофа S3?

  3. IDE за разработка на Pl/SQL

  4. Не могат да се създадат първоначални връзки за проблеми с пула в Grails

  5. Грешка в тригера на Oracle ORA-04091