Select datediff(year,in_time,out_time)
Select datediff(month,in_time,out_time)
Select datediff(day,in_time,out_time)
Select datediff(hour,in_time,out_time)
Select datediff(minute,in_time,out_time)
Select datediff(second,in_time,out_time)
...

解决方案 »

  1.   

    1、00.00.02 02:01:02 不是一个有效的时间你说它是2、返回分种:
    declare @a datetime,@b datetime
    select @a='2003.08.03 12:03:03' ,@b='2003.08.01 10:02:01'select datediff(mi,@b,@a) 分钟
      

  2.   

    方法,先得到秒数,也就是你要的时候最精度.Select datediff(second,in_time,out_time)用秒转换为天,小时,分钟等.
      

  3.   

    没有直接的方法.写个存储过程来实现吧
    /*
    日期相减的存储过程
    */
    --创建日期相减的存储过程
    create procedure sdatediff
    @t1 datetime
    ,@t2 datetime
    ,@re varchar(20) output
    as
    declare @sql nvarchar(1000),@str varchar(20)
    select @sql='select @re=',@str='yy.mm.dd hh:mi:ss '
    while @str<>''
      select @re='datepart('+left(@str,2)
        ,@sql=@sql+'+right(100+'
        +@re+','''+convert(varchar(20),@t1,120)
        +''')-'+@re+','''+convert(varchar(20),@t2,120)
        +'''),2)+'''+substring(@str,3,1)+''''
        ,@str=substring(@str,4,20)exec sp_executesql @sql,N'@re varchar(17) output',@re output
    go
    --调用存储过程
    declare @t1 datetime,@t2 datetime,@re varchar(20)
    select @t1='2003.08.03 12:03:03',@t2='2003.08.01 10:02:01'exec sdatediff @t1,@t2,@re out
    print @re--删除存储过程
    drop proc sdatediff