如下select datediff(mm,'20091001','20091120')得到1,但实际上是1月多,那么我怎样得到精确的1.xx月呢?

解决方案 »

  1.   

    我的程序有个地方需要判断"1<月份差<2",但datediff(mm,'20091001','20091120')等于1月,就遗漏了,按理说应该落在"1<月份差<2"的
      

  2.   


    晕  你用between ...and 就OK了 包含边界值
      

  3.   

    程序里面是用>= && <=
      

  4.   

    但业务要求比较变态,正好差1月,算在0~1内,若差多于1个月,就要算在1~2,也就是> && <=
      

  5.   

    在"1 =<月份差 <2"的如何?
    其实按你的想法,直接写datediff(mm,'20091001','20091120')=1就可以了,再加上个dateadd来判断一下,是否满足一个月就好了。
      

  6.   

    >dateadd(month,@t,date) and <=dateadd(month,@t+1,date)
    这样写就行了
      

  7.   

    select DATEDIFF(DD,DATEADD(MM,datediff(MM,'20091001','20091120'),'20091001'),'20091120')
      

  8.   

    select 
    LTRIM(datediff(MM,'20091001','20091120'))+'月'
    +LTRIM(DATEDIFF(DD,DATEADD(MM,datediff(MM,'20091001','20091120'),'20091001'),'20091120'))+'天'
    /*
                                 
    ---------------------------- 
    1月19天(所影响的行数为 1 行)*/
    这样写,你判断一下就知道了,如果后面天数差>0则大于那个月
      

  9.   

    ----用“天数平均法”
    ----也就是说:你的起始日期到终止日期,共几个月零几天,相差几个月,去相除,得到每月的平均天数,
    ----再...........----这样好复杂了,其实没有必要!--例如:从 '2009-08-04'    到    '2009-10-20'
    select datediff(day,'2009-08-04','2009-10-20');
    --相距77天-- 而'2009-08-01' 到 '2009-10-31'  --共3个月, 92天
    --相距92天
    select datediff(day,'2009-08-01','2009-10-31')+1;select (datediff(day,'2009-08-01','2009-10-31')+1)/3.0;  ---再77/(平均每月的天数)
    select 77/((datediff(day,'2009-08-01','2009-10-31')+1)/3.0);
     
      

  10.   

    --例如:从 '2009-08-04'    到    '2009-10-20'
    select datediff(day,'2009-08-04','2009-10-20')+1;
    --相距78天-- 而'2009-08-01' 到 '2009-10-31'  --共3个月, 92天
    --相距92天
    select datediff(day,'2009-08-01','2009-10-31')+1;select (datediff(day,'2009-08-01','2009-10-31')+1)/3.0;  ---再78/(平均每月的天数)
    select 78/((datediff(day,'2009-08-01','2009-10-31')+1)/3.0);