日期:2014-05-17  浏览次数:21492 次

sqlserver如何计算两个日期之差,精确到毫秒计算
declare @starttime datetime,@endtime datetime
set @starttime='2012-10-07 10:57:23.957'
set @endtime  ='2012-11-08 08:31:03.224'

如题,我要得到相差31天 几小时 几分 几秒 几毫秒

select datediff(part,@starttime,@endtime)
part使用day计算出来是32天,不对;
part使用ss,ss最大是60几天,超出的话不对;
part使用ms,ms最大是24小时多少多少,超出不对。

大神们,你们是怎么做的啊?

------解决方案--------------------
逻辑错了
DECLARE @starttime DATETIME ,
    @endtime DATETIME
SET @starttime = '2012-10-07 10:57:23.957'
SET @endtime = '2012-11-08 08:31:03.224'
SELECT  CASE WHEN DATEDIFF(hour, @starttime, @endtime) < 24
             THEN CONVERT(VARCHAR(10), DATEDIFF(DAY, @starttime, @endtime) )
             ELSE CONVERT(VARCHAR(10), DATEDIFF(DAY, @starttime, @endtime)- 1)
        END + '天' + CONVERT(VARCHAR(10), DATEDIFF(hour, @starttime, @endtime)
        % 24) + '时' + CONVERT(VARCHAR(10), DATEDIFF(mm, @starttime, @endtime)
        % 60) + '分' + CONVERT(VARCHAR(10), DATEDIFF(ss, @starttime, @endtime)
        % 60) + '秒'

------解决方案--------------------
应该可以这样做的

------解决方案--------------------
 declare @starttime datetime,@endtime datetime
 set @starttime='2012-10-07 10:57:23.957'
 set @endtime  ='2012-11-08 08:31:03.224'
用datediff(d,@starttime,@endtime)
hh为小时 mi为分 s为秒 ms为毫秒
------解决方案--------------------
--计算时间
declare @starttime datetime,@endtime datetime
set @starttime ='2012-10-07 10:57:23.957'
set @endtime  ='2012-11-08 08:31:03.224'
--需减1 因为当天不能被计算所以减去当天  
 select convert(varchar(50),datediff(DAY,@starttime,@endtime)-1)+'天'+
   convert(varchar(50),datediff(HH,@starttime,@endtime)%24)+ '小时'+
   convert(varchar(50),datediff(MI,@starttime,@endtime)%60)+'分钟'+
   convert(varchar(50),datediff(S,@starttime,@endtime)%60)+'秒'+
   convert(varchar(50),datediff(S,@starttime,@endtime)%60%1000)+'毫秒'
--1秒等于一千毫秒  则毫秒用秒来计算