Оформление диапазона дат в оракуле - PullRequest
2 голосов
/ 26 января 2012

Я хочу разбить строку на месячные полосы в Oracle 11.

Например, скажем, у меня есть схема:

CREATE TABLE MY_TABLE (
  A_FIELD VARCHAR2(45),
  START_DATE DATE,
  END_DATE DATE
);

С такой записью, как: "foo", 1-1-2011, 1-1-2012

Есть ли способ сделать запрос к таблице таким образом, чтобы я получил набор результатов, например:

"foo", Jan-11
"foo", Feb-11
"foo", Mar-11
"foo", Apr-11
"foo", May-11
.....
"foo", Jan-12

Я пробовал различные методы с CONNECT BY LEVEL, MONTHS_BETWEEN и т. Д., Но я не могу 'Похоже, все правильно.

Спасибо всем за помощь.

1 Ответ

3 голосов
/ 26 января 2012

Попробуй это.В этом решении есть пара предположений.Во-первых, между end_date и start_date не более 200 месяцев - вы можете настроить 200 в запросе по своему усмотрению.Второе предположение заключается в том, что день месяца всегда один и тот же.Если это не так, вы можете настроить запрос достаточно легко, чтобы полностью игнорировать день.Но это должно помочь вам на 99% - просто дайте мне знать, если вам нужны разъяснения.

select a.A_FIELD, to_char(add_months(a.START_DATE,r), 'Mon-yy') as display_month
from MY_TABLE a, (
    select rownum-1 r 
    from all_objects
    where rownum <= 200) b
where add_months(trunc(a.START_DATE,'mm'),r) <= trunc(a.END_DATE,'mm')
order by A_FIELD, b.r
...