我在一个表中建立了2个日期字段,分别是开始日和结束日,日期格式是yy-mm-dd,如开始日2006-05-31     结束日2007-01-01
我要得到这2个字段间的月份,只要每个月有一天就算一个月,如上面说的 会有5月,6月,7月8月9月10月11月12月和1月共9个月
怎样写sql语句查询能得出9个月来?主要是不知道用什么办法求出来,请各位帮忙!谢谢

解决方案 »

  1.   

    Select Round(Months_Between(To_Date('2007-01-01', 'yyyy-mm-dd'), To_Date('2006-05-31', 'yyyy-mm-dd')),0) From Dual
      

  2.   

    to_char(date1,'MM')-to_char(date2,'MM')
      

  3.   

    用了2楼的方法解决了,多谢大家
    (to_number(to_char(t_user.abolished_ts,'yyyy'))-to_number(to_char(t_user.created_ts,'yyyy')))*12+(to_number(to_char(t_user.abolished_ts,'mm'))-to_number(to_char(t_user.created_ts,'mm')))+1 as mon我是这样写的
      

  4.   

    嗯嗬 好像不对哦 
    如果是同一个年份的就不行了。
    试下:
    SQL> select *  from rqcs 
      2  /
     
    RQ1         RQ2
    ----------- -----------
    2007-11-1   2007-12-1
     
    SQL> 
    SQL> Select
      2  (to_number(to_char(rq1,'yyyy'))-to_number(to_char(rq2,'yyyy')))*12
      3  +(to_number(to_char(rq1,'mm'))- to_number(to_char(rq2,'mm')))+1
      4   From rqcs;
     
    (TO_NUMBER(TO_CHAR(RQ1,'YYYY')
    ------------------------------
                                 0
     
    SQL> 
      

  5.   

    同一个年份的就错误了 ;
    还要加个年份的判断啊,修改测试了下,可以来:
    SQL> Select * From rqcs;
     
    RQ1         RQ2
    ----------- -----------
    2007-11-1   2007-12-1
    2006-11-1   2007-11-1
    SQL> Select Rq1,
      2         Rq2,
      3         (Case
      4           When To_Char(Rq1, 'yyyy') = To_Char(Rq2, 'yyyy') Then
      5            Abs(Months_Between(Rq1, Rq2))
      6           Else
      7            Abs(To_Number(To_Char(Rq1, 'yyyy')) -
      8                To_Number(To_Char(Rq2, 'yyyy'))) * 12 +
      9            (To_Number(To_Char(Rq1, 'mm')) - To_Number(To_Char(Rq2, 'mm')) + 1)
     10         End) As Mon
     11    From Rqcs;
     
    RQ1         RQ2                MON
    ----------- ----------- ----------
    2007-11-1   2007-12-1            1
    2006-11-1   2007-11-1           13
     
    SQL>