我现在要在数据库中执行一个这样的查询.
(((输入一个月份,输出同个季度的其他月份数)))
也就是说当前是200908,然后就输出一个当前季度的`最小月与最大月`` 200907 - 200909下面是我写的方法(oracle库):
IF(chargeMonth>=0 and chargeMonth<=3)THEN
BYearMonth:= to_number(to_char(chargeYear) || '01');
EYearMonth:= to_number(to_char(chargeYear) ||'03');
END IF;
IF(chargeMonth>=4 and chargeMonth<=6)THEN
BYearMonth:= to_number(to_char(chargeYear) || '04');
EYearMonth:= to_number(to_char(chargeYear) ||'06');
END IF;
.............问还有别的更好的方法吗????急``!
(((输入一个月份,输出同个季度的其他月份数)))
也就是说当前是200908,然后就输出一个当前季度的`最小月与最大月`` 200907 - 200909下面是我写的方法(oracle库):
IF(chargeMonth>=0 and chargeMonth<=3)THEN
BYearMonth:= to_number(to_char(chargeYear) || '01');
EYearMonth:= to_number(to_char(chargeYear) ||'03');
END IF;
IF(chargeMonth>=4 and chargeMonth<=6)THEN
BYearMonth:= to_number(to_char(chargeYear) || '04');
EYearMonth:= to_number(to_char(chargeYear) ||'06');
END IF;
.............问还有别的更好的方法吗????急``!
解决方案 »
- 一次查询字段相同数据不同的几张表——Oracle查询语句求助
- oracle 10.2 在CentOS4.7上安装到40% 不动了?
- 查询出现很多数据重复?
- 在程序中创建存储过程的问题!
- 请教一条sql语句
- 在线等,马上结贴:在oracle中的PLSQL程序里把表的数据 导出 成为csv文件
- to :LGQDUCKY(飘) 关于你给的那个存储过程,我还是不会用啊。。。
- EXP-IMP問題,老問題還是解決不了.
- 有什么办法可以在指定的表里任意只选取一条数据?
- 近期的csdn经常出问题,怎么回事?
- javax.management.MalformedObjectNameException
- ORA-27101 shared memory realm does not exist
inDate DATE;
MaxDate DATE;
MinDate DATE;
BEGIN
inDateStr :='200908';
inDate := TO_DATE(inDateStr,'YYYYMM');
SELECT MAX(A.OUTDATE), MIN(A.OUTDATE) INTO MaxDate,MinDate
FROM
(
SELECT ADD_MONTHS(inDate,1) AS OUTDATE FROM DUAL
UNION
SELECT ADD_MONTHS(inDate,2) FROM DUAL
UNION
SELECT ADD_MONTHS(inDate,-1) FROM DUAL
UNION
SELECT ADD_MONTHS(inDate,-2) FROM DUAL
) A
WHERE TO_CHAR(A.OUTDATE,'YYYY-Q') = TO_CHAR(inDate,'YYYY-Q');
END;
TRUNC(SYSDATE,
--------------
01-7月 -09如果是10g的版本或者above的话,可以直接用
一些sql达到你的目的
SQL> Select to_char(add_months(trunc(sysdate,'Q'), rownum-1), 'yyyymm') months
from dual connect by rownum <=3;
MONTHS
------
200907
200908
2009099i或者一下的就通过union来解决了
Select to_char(add_months(trunc(sysdate,'Q'), 0), 'yyyymm') months from dual
union
Select to_char(add_months(trunc(sysdate,'Q'), 1), 'yyyymm') months from dual
union
Select to_char(add_months(trunc(sysdate,'Q'), 2), 'yyyymm') months from dual;MONTHS
------
200907
200908
200909把sysdate换成你的日期或者是变量就可以了,注意这里如果日期是字符串的话,要用to_date转一下。
select to_char(min(months), 'yyyymm') minM, to_char(max(months), 'yyyymm') maxM from (Select add_months(trunc(sysdate,'Q'), rownum-1) months
from dual connect by rownum <=3); MINM MAXM
------ ------
200907 200909
from dual connect by rownum <=3; 这一小段``能详解一下吗?``高手啊``!
trunc就是做一定的四舍五入,这里'Q'表示用季度来做四舍五入connect by是oracle提供的一种树查找的方法,当结果满足是继续下一条的意思。10g可以用以上的方式,oracle9i里有bug,用以上的方式只出来最前的一条,这个已经有很多网友验证过了,我也验证过。以上各知识点都可以通过google查得到很详细的用法的。