oracle列出指定时间范围内的所有月份?
在网上找到,如:SELECTTO_CHAR(add_months(to_date('2011-03','yyyy-mm'),ROWNUM-1),'YYYY-MM')asy...
在网上找到,如:
SELECT TO_CHAR( add_months(to_date('2011-03', 'yyyy-mm'), ROWNUM - 1),'YYYY-MM') as yearMonth FROM DUAL
CONNECT BY ROWNUM <= (select months_between(to_date('2012-07','yyyy-mm'),to_date('2011-03','yyyy-mm')) from dual);
我的是oracle9i,我在pl/sql上跑会报,ora-01473:cannot have subqueries in connect by clause,请问还有其它方法实现吗 展开
SELECT TO_CHAR( add_months(to_date('2011-03', 'yyyy-mm'), ROWNUM - 1),'YYYY-MM') as yearMonth FROM DUAL
CONNECT BY ROWNUM <= (select months_between(to_date('2012-07','yyyy-mm'),to_date('2011-03','yyyy-mm')) from dual);
我的是oracle9i,我在pl/sql上跑会报,ora-01473:cannot have subqueries in connect by clause,请问还有其它方法实现吗 展开
5个回答
展开全部
这是递归写法的问题,在8,9i升级新版本过程中经常遇到类似问题.这个在10g,11g以后跑应该都没问题,在9i按以下方法写可以实现:
SELECT TO_CHAR (ADD_MONTHS (TO_DATE ('2011-03', 'yyyy-mm'), ROWNUM - 1),'YYYY-MM') AS yearmonth FROM all_objects
WHERE ROWNUM <=(SELECT MONTHS_BETWEEN (TO_DATE ('2012-07', 'yyyy-mm'),TO_DATE ('2011-03', 'yyyy-mm')) FROM DUAL)
SELECT TO_CHAR (ADD_MONTHS (TO_DATE ('2011-03', 'yyyy-mm'), ROWNUM - 1),'YYYY-MM') AS yearmonth FROM all_objects
WHERE ROWNUM <=(SELECT MONTHS_BETWEEN (TO_DATE ('2012-07', 'yyyy-mm'),TO_DATE ('2011-03', 'yyyy-mm')) FROM DUAL)
推荐于2018-03-06
展开全部
指定年份到当前年的范围:SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2013', 'yyyy'), (ROWNUM - 1) * 12), 'yyyy') as nd
FROM DUAL
CONNECT BY ROWNUM <=
months_between(to_date(to_char(sysdate,'yyyy'),'yyyy') ,
to_date('2013', 'yyyy')) / 12 + 1
FROM DUAL
CONNECT BY ROWNUM <=
months_between(to_date(to_char(sysdate,'yyyy'),'yyyy') ,
to_date('2013', 'yyyy')) / 12 + 1
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题是由于你数据库版本过低产生的。
这个错误出现在 CONNECT BY 这个层次查询子句,一般CONNECT BY用于树状或者层次结果集的查询。
推荐,最好是更换数据库,因为现在ORACLE官网你也下载不到9i和10g了。而且版本低有些新加的函数都用不了。
如果非要在9I上修改这句话,很麻烦!!
这个错误出现在 CONNECT BY 这个层次查询子句,一般CONNECT BY用于树状或者层次结果集的查询。
推荐,最好是更换数据库,因为现在ORACLE官网你也下载不到9i和10g了。而且版本低有些新加的函数都用不了。
如果非要在9I上修改这句话,很麻烦!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SELECT to_number(TO_CHAR(add_months(trunc(sysdate,'yy'), ROWNUM - 1),
'MM')) as month
FROM DUAL
CONNECT BY ROWNUM <= (select months_between(trunc(sysdate,'mm'),trunc(sysdate,'yy')) + 1
from dual);
这是我借鉴了一楼的写的,查询截至到当前日期的当年的所有月份
'MM')) as month
FROM DUAL
CONNECT BY ROWNUM <= (select months_between(trunc(sysdate,'mm'),trunc(sysdate,'yy')) + 1
from dual);
这是我借鉴了一楼的写的,查询截至到当前日期的当年的所有月份
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select to_date(item_date,'yyyy-mm') from (
select to_number(months_between(to_date('2012-07','yyyy-mm'),to_date('2011-03','yyyy-mm'))) item_date from dual ) 不行?
select to_number(months_between(to_date('2012-07','yyyy-mm'),to_date('2011-03','yyyy-mm'))) item_date from dual ) 不行?
追问
谢谢你的回答,不过明显不行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询