繁体   English   中英

在SQL中计算小时和分钟

[英]Calculating hours and minutes in sql

我有查询:

SELECT    
    MemberId,  
    FirstName,LastName,  
    [DateOfChange]        
    ,(select title from StatusList where idStatus=[OldStatus]) as [OldStatus]  
    ,(select title from StatusList where idStatus=[NewStatus]) as [NewStatus]  
FROM 
    [statusLog] , Users 
WHERE
    statusLog.IdUser = Users.IdUser

在此处输入图片说明

我想从DateOfChange列的小时和分钟中找到旧状态更改和新状态更改之间的差异。

DateOfChange             OldStatus          NewStatus     DiffernceInTime
-------------------------------------------------------------------------    
2014-04-04 16:15:20       Patrol              OnCall          ---
2014-04-04 17:20:20       OnCall              Patrol         1:05
2014-04-04 18:30:20       Patrol              Available      1:10

我写了这个查询:

SELECT 
   [users].MemberId,
   [users].FirstName,
   [users].LastName,
   thisLog.DateOfChange,
   statusList1.title as OldStatus,
   statuslist2.title as NewStatus,
   (SELECT TOP 1 DATEDIFF(hour, lastLog.DateOfChange, thisLog.DateOfChange)
    FROM [dbo].[statusLog] lastLog 
    WHERE lastLog.DateOfChange < thisLog.DateOfChange
    ORDER BY DateOfChange DESC) AS HoursSinceLastChange
FROM 
   [dbo].[statusLog] thisLog
INNER JOIN 
   [users] ON [users].IdUser = thisLog.IdUSer
INNER JOIN 
   StatusList statusList1 ON statusList1.idStatus = thisLog.OldStatus
INNER JOIN 
   StatusList statusList2 on statusList2.idStatus = thisLog.Newstatus
ORDER BY 
   DateOfChange DESC

但是它只计算几个小时。 不是我上面提到的几分钟。

我在联接中使用了以下表格:

Users

在此处输入图片说明

StatusLog

在此处输入图片说明

请帮我。

尝试这个:

cast(datediff(minute,@start,@end)/60  as varchar)
+':'
+right('00'+cast(datediff(minute,@start,@end)%60 as varchar),2) [DifferenceInTime]

第一个表达式将获得小时数差异,而第三个表达式将获得分钟数差异。 请注意,这是作为varchar数据类型返回的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM