日期:2014-05-17 浏览次数:20906 次
定义一个计算上个月的函数
create or replace function F_Pre_month(pi_yearmonth in varchar2) return varchar2 is
Result varchar2(6);
year number;
month number;
begin
year:=to_number(pi_yearmonth,1,4);
month:=to_number(pi_yearmonth,5,2);
month:=month-1;
if(month<=0) then
month:=12;
year:=year-1;
end if;
Result:=year
------其他解决方案--------------------
lpad(to_char(rownum),2,'0') 月份,
F_Pre_month(2012
------其他解决方案--------------------
'20' 起始日期,
2012
------其他解决方案--------------------
不知道能不能通过这样的方式来连接?
SELECT add_months(ADD_MONTHS(DATE'2010-12-01',LEVEL)+19,-1) AS COL1
FROM DUAL
CONNECT BY LEVEL <= 12
COL1
--------------------------
1 2010/12/20
2 2011/1/20
3 2011/2/20
4 2011/3/20
5 2011/4/20
6 2011/5/20
7 2011/6/20
8 2011/7/20
9 2011/8/20
10 2011/9/20
11 2011/10/20
12 2011/11/20
------其他解决方案--------------------
相对而言呗……
在查询计算之间,每个日期减去20,就可以放到一个月里处理了……
------其他解决方案--------------------
楼上方法直接减20 应该是不合理的
这种逻辑要是相对固定 建议在表里加上额外标记字段
如果不是
那就内层查询按照逻辑判断创建标记字段
然后外层查询按照创建的标记字段分组统计
------其他解决方案--------------------
lpad(to_char(month),2,'0');
return(Result);
end F_Pre_month;
然后
select
2012
------其他解决方案--------------------
lpad(to_char(rownum),2,'0'))
------其他解决方案--------------------
lpad(to_char(rownum),2,'0')