我希望在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等各种方法,但我似乎无法正确使用它。
感谢大家的帮助。
答案 0 :(得分:3)
试试这个。这个解决方案有几个假设。一个是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