select trunc((to_char(sysdate,'mm')-1)/3)*3+1 from dual 这是要查的季度的起始月份 select trunc((to_char(sysdate,'mm')-1)/3+1)*3 from dual 最后一月
select add_months(to_date(to_char(sysdate,'yyyy')||to_char(trunc((to_char(sysdate,'mm')-1)/3)*3+1,'00'),'yyyymm'),rownum-1) from dual connect by rownum<=3
select add_months(to_date(to_char(sysdate,'yyyy')||to_char(trunc((to_char(sysdate,'mm')-1)/3+1)*3,'00'),'yyyymm'),1-rownum) from dual connect by rownum <=6
select substr(add_months(to_date(to_char(sysdate,'yyyy')||to_char(trunc((to_char(sysdate,'mm')-1)/3)*3+1,'00'),'yyyymm'),rownum-4) ,4,2)from dual connect by rownum <=6
这个基本就是一个死算法
没啥技术可言的,使用 case when 判断月份在哪个区间即可
这是要查的季度的起始月份
select trunc((to_char(sysdate,'mm')-1)/3+1)*3 from dual
最后一月
connect by rownum<=3
connect by rownum <=6
connect by rownum <=6
只要年月,不要日子,一次只查一条记录,
比如:
写一个SQL语句,执行结果 :2009-09
写一个SQL语句,执行结果 :2009-08
写一个SQL语句,执行结果 :2009-07
写一个SQL语句,执行结果 :2009-06
写一个SQL语句,执行结果 :2009-05
写一个SQL语句,执行结果 :2009-04
写一个select to_char(sysdate,'yyyy-mm') from dual.......,执行结果 :2009-09
写一个select to_char(sysdate,'yyyy-mm') from dual.......,,执行结果 :2009-08
写一个select to_char(sysdate,'yyyy-mm') from dual.......,,执行结果 :2009-07
写一个select to_char(sysdate,'yyyy-mm') from dual.......,,执行结果 :2009-06
写一个select to_char(sysdate,'yyyy-mm') from dual.......,,执行结果 :2009-05
写一个select to_char(sysdate,'yyyy-mm') from dual.......,,执行结果 :2009-04
每次运行的时候,一次将:rn改成0,1,2,3,4,5
这样?
scott@ORCL10G> select hiredate,'该员工是:'||to_char(hiredate,'YYYY')||'年'||'第 '||
2 to_char(trunc(to_char(hiredate,'mm')*3/10)+1)||'季度 入厂工作的' as "入厂季度" from emp;HIREDATE 入厂季度
-------------- --------------------------------------------------------------------------
17-12月-80 该员工是:1980年第 4季度 入厂工作的
20-2月 -81 该员工是:1981年第 1季度 入厂工作的
22-2月 -81 该员工是:1981年第 1季度 入厂工作的
02-4月 -81 该员工是:1981年第 2季度 入厂工作的
28-9月 -81 该员工是:1981年第 3季度 入厂工作的
01-5月 -81 该员工是:1981年第 2季度 入厂工作的
09-6月 -81 该员工是:1981年第 2季度 入厂工作的
19-4月 -87 该员工是:1987年第 2季度 入厂工作的
17-11月-81 该员工是:1981年第 4季度 入厂工作的
08-9月 -81 该员工是:1981年第 3季度 入厂工作的
23-5月 -87 该员工是:1987年第 2季度 入厂工作的
03-12月-81 该员工是:1981年第 4季度 入厂工作的
03-12月-81 该员工是:1981年第 4季度 入厂工作的
23-1月 -82 该员工是:1982年第 1季度 入厂工作的已选择14行。scott@ORCL10G>
TO_CHAR(hiredate,'YYYY-MM-DD') hiredate,
trunc(to_char(hiredate,'mm')*3/10)+1) "In_Season"
FROM emp;
如果你用pl/sql写的话,可以先取得第一个值
用一个loop陆续输出