【发布时间】:2010-12-07 10:58:08
【问题描述】:
好的,我是新来使用 connect by 的东西。但它总是很有用。我有一个小问题,你们也许可以帮助我...
给定开始月份(比如to_char(sysdate,'YYYYMM'))和结束月份(比如to_char(add_months(sysdate, 6),'YYYYMM')),想要以相同的格式获取其间的月份列表。
好吧,我想在分区自动化脚本中使用它。到目前为止,我最好的镜头(非常可怜)产生了无效的月份,例如'201034'......(是的,我知道,效率非常低)
按照代码:
SELECT id
from
(select to_char(add_months(sysdate, 6),'YYYYMM') as tn_end, to_char(sysdate,'YYYYMM') as tn_start from dual) tabla,
(select * from
(Select Level as Id from dual connect by Level <= (Select to_char(add_months(sysdate, 1),'YYYYMM')from dual)) where id > to_char(sysdate,'YYYYMM')) t
Where
t.Id between tabla.tn_start and tabla.tn_end
如何使此查询仅返回有效月份?有什么建议吗?
朋友们,
f.
【问题讨论】:
-
在 PL/SQL 中使用循环自动执行此操作会容易得多,而且可维护性也会好得多。