select datediff(mm,'2010-01-10',getdate())   目前计算出来的是3,但其实不应该是3个月,到明天才算3个月!怎么能得出2.几    请指教!

解决方案 »

  1.   

    datediff  mm的仅仅是月份的差值。如果想得到多少天的话,用dd吧。2.X个月,貌似不太好理解。
      

  2.   

    declare @dt1 as datetime
    declare @dt2 as datetimeset @dt1 = '2010-01-10'
    set @dt2 = getdate()select case when datepart(dd,@dt1) > datepart(dd,@dt2) then ltrim(datediff(mm,@dt1,@dt2) - 1) + '月' + ltrim(30 - datepart(dd,@dt1) + datepart(dd,@dt2)) + '天'
                else ltrim(datediff(mm,@dt1,@dt2)) + '月' + ltrim(datepart(dd,@dt1) - datepart(dd,@dt2)) + '天'
                end
    /*
                                 
    ---------------------------- 
    2月29天(所影响的行数为 1 行)
    */set @dt1 = '2010-01-08'select case when datepart(dd,@dt1) > datepart(dd,@dt2) then ltrim(datediff(mm,@dt1,@dt2) - 1) + '月' + ltrim(30 - datepart(dd,@dt1) + datepart(dd,@dt2)) + '天'
                else ltrim(datediff(mm,@dt1,@dt2)) + '月' + ltrim(datepart(dd,@dt2) - datepart(dd,@dt1)) + '天'
                end
    /*
                                 
    ---------------------------- 
    3月1天(所影响的行数为 1 行)
    */
      

  3.   


    select datediff(mm,'2010-01-10',getdate())-case when day('2010-01-10')> day(getdate())then 1 else 0 end
      

  4.   

    declare @dt1 as datetime
    declare @dt2 as datetimeset @dt1 = '2010-01-10'
    set @dt2 = getdate()select case when datepart(dd,@dt1) > datepart(dd,@dt2) then ltrim(datediff(mm,@dt1,@dt2) - 1) + '月' + ltrim((30 - datepart(dd,@dt1) + datepart(dd,@dt2))/30.00) + '天'
                else ltrim(datediff(mm,@dt1,@dt2)) + '月' + ltrim((datepart(dd,@dt1) - datepart(dd,@dt2))/30.00) + '天'
                end
    /*
                                                             
    -------------------------------------------------------- 
    2月0.966666天(所影响的行数为 1 行)
    */set @dt1 = '2010-01-08'select case when datepart(dd,@dt1) > datepart(dd,@dt2) then ltrim(datediff(mm,@dt1,@dt2) - 1) + '月' + ltrim((30 - datepart(dd,@dt1) + datepart(dd,@dt2))/30.00) + '天'
                else ltrim(datediff(mm,@dt1,@dt2)) + '月' + ltrim((datepart(dd,@dt2) - datepart(dd,@dt1))/30.00) + '天'
                end
    /*
                                                             
    -------------------------------------------------------- 
    3月0.033333天(所影响的行数为 1 行)*/