select datediff(year,'2004-09-20','2008-09-18') 
为什么返回的是4而不是3?

解决方案 »

  1.   

    select datediff(year,'2004-09-20','2008-09-18')  
    go
    select datediff(year,'2004-12-31','2008-01-01')  
    go
    --是两个年相减   2008-2004=4
      

  2.   


    select datediff(year,'2004-09-20','2008-09-18')  
    --结果4
      

  3.   

    select datediff(year,'2004-09-20','2008-09-18')  
    为什么返回的是4而不是3?
    --
    函数的格式:
    DATEDIFF ( datepart , startdate , enddate )函数的参数:
    datepart 
    指定应在日期的哪一部分计算差额的参数。
    startdate 
    计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。
    enddate 
    计算的结束日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。返回的类型为integer其实这个函数的执行过程是这样的,根据datepart取startdate的“datepart”值,根据datepart取enddate 的“datepart”值
    二者相减得到最终结果
      

  4.   

    select datediff(year,'2004-09-20','2008-09-18')  参数是year所以精确到年,计算的也是年2008-2004=4
      

  5.   

    --还差365天呢,都是当差1年
    select datediff(year, '2007-12-31', '2008-01-01')
      

  6.   

    如果你需要计算两个日期实际相隔了多长时间,时间单位为年的话,可以select datediff(day,'2004-09-20','2008-09-18')*1.0/365
    -------------------- 
    3.997260
    (影響 1 個資料列)select datediff(year,'2004-09-20','2008-09-18') 这样只计算年份值。
      

  7.   

    declare @datestart datetime,@dateend datetime
    set @datestart='2004-09-20'
    set @dateend='2008-09-19'select 
    case when datepart(mm,@datestart)<datepart(mm,@dateend)
    then datediff(year,@datestart,@dateend)-1
    when datepart(mm,@datestart)=datepart(mm,@dateend) 
    and datepart(dd,@datestart)>datepart(dd,@dateend)
    then datediff(year,@datestart,@dateend)-1 
    else datediff(year,@datestart,@dateend)
    end as [year]year
    3