2013-02-19 3 views
0

У меня есть таблица, в которой есть столбец периода, хранящийся в формате YYYYMM'||-||'YYYYMM (пример: 201111-201203). Мне нужен SQL-запрос, который приведет к получению данных в строке с каждым месяцем повторения строки в формате YYYYMM.Данные периода запроса Oracle до месяца

ВХОД

201111-201203 

ВЫВОД

201111 
201112 
201201 
201202 
201203 
+0

Добро пожаловать в StackOverflow! Вы еще что-нибудь пробовали? – peterm

ответ

1

Анализ этот код:

select 
    id, to_char(add_months(to_date(substr(interv,1,6),'yyyymm'), i),'yyyymm') 
from 
    (Select level-1 as i from dual connect by level <= 50) 
    join 
    (
    select 1 as id,'201111-201203' as interv from dual 
    union all 
    select 2, '201201-201301' from dual 
    ) 
on add_months(to_date(substr(interv,1,6),'yyyymm'), i) <= 
    to_date(substr(interv,-6),'yyyymm') 
order by 1,2; 
+0

Спасибо .. Работал после объединения commneting все выберите 2, '201201-201301' от двойного –

+0

выбирает из двойного для тестирования. В запросе показано, как выполнить запрос, который разбивает все интервалы в таблице. –

0

использовать этот фрагмент кода для разработки кода, вы можете создать функцию или процедуру, чтобы получить выход, как вы хотите

declare 

    v_from_date date; 
    v_to_date date; 

    v_time varchar2(20); 

begin 

    v_time := '201111-201203'; 


    v_from_date := to_date(substr(v_time, 0, 6), 'YYYYMM'); 
    v_to_date := to_date(substr(v_time, 8, 6), 'YYYYMM'); 

    while v_from_date <= v_to_date loop 

    dbms_output.put_line(v_from_date); 

    v_from_date := ADD_MONTHS(v_from_date, 1); 

    end loop; 

end; 
1

Забудьте присоединяется и PL/SQL:

-- List of months between dates -- 
SELECT to_char(add_months(start_date, LEVEL-1), 'YYYYMM') list_of_months 
FROM 
(
    SELECT to_date('201111', 'YYYYMM') start_date, 
     to_date('201203', 'YYYYMM') end_date 
    FROM dual 
) 
    CONNECT BY LEVEL <= MONTHS_BETWEEN(Trunc(end_date,'MM'), Trunc(start_date,'MM'))+1 
/

LIST_OF_MONTHS 
-------------- 
201111 
201112 
201201 
201202 
201203 
Смежные вопросы