如何判断当前月是属于哪个季度的?
并且列出这个季度的所有月份!SQL  怎么写呢??

解决方案 »

  1.   


    这个基本就是一个死算法
    没啥技术可言的,使用 case when 判断月份在哪个区间即可
      

  2.   

    select trunc((to_char(sysdate,'mm')-1)/3)*3+1 from dual
    这是要查的季度的起始月份
    select trunc((to_char(sysdate,'mm')-1)/3+1)*3 from dual
    最后一月
      

  3.   

    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
      

  4.   

    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
      

  5.   

    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
      

  6.   

    最后一个问题就揭贴:
    只要年月,不要日子,一次只查一条记录,
    比如:
    写一个SQL语句,执行结果 :2009-09
    写一个SQL语句,执行结果 :2009-08
    写一个SQL语句,执行结果 :2009-07
    写一个SQL语句,执行结果 :2009-06
    写一个SQL语句,执行结果 :2009-05
    写一个SQL语句,执行结果 :2009-04
      

  7.   

    select to_char(sysdate,'yyyy-mm') from dual;
      

  8.   

    条件是:根据当前月来判断,比如:
    写一个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
      

  9.   

    select to_char(add_months(to_date(to_char(sysdate,'yyyy')||to_char(trunc((to_char(sysdate,'mm')-1)/3+1)*3,'00'),'yyyymm'),:rn*-1),'yyyy-mm') from dual 
    每次运行的时候,一次将:rn改成0,1,2,3,4,5
    这样?
      

  10.   


    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> 
      

  11.   

    SELECT  empno, ename, 
    TO_CHAR(hiredate,'YYYY-MM-DD') hiredate,
    trunc(to_char(hiredate,'mm')*3/10)+1) "In_Season"
      FROM  emp;
      

  12.   

    不知道为什么你要每次运行得到一个结果
    如果你用pl/sql写的话,可以先取得第一个值
    用一个loop陆续输出