如何在两列类型时间之间获得时间?

时间:2011-06-26 19:07:26

标签: sql sql-server tsql sql-server-2008 time

我在SQL Server中有一个表

id int, 
enters time, 
left time, 
date datetime,
user varchar(50)

现在我希望得到enterslefts之间的时差,但是我收到此错误消息:

  

Msg 8117,Level 16,State 1,Line 1
  操作数数据类型时间对于减法运算符无效。

我怎样才能让时间过去? 例如,如果用户在8.00输入并在9.15离开,我需要得到1.15 我怎么能这样做?

4 个答案:

答案 0 :(得分:4)

declare @MyTable table(enters time, lefttime time)
insert @MyTable values('8:00', '9:05')

select *,
    cast(datediff(hour, enters, lefttime) as varchar) + ':' + 
        right('0' + cast(datediff(minute, enters, lefttime) % 60 as varchar), 2)
from @MyTable

<强> [编辑]

添加0填充以避免显示1:5,而不是1:05


另一种方法:

select cast(dateadd(minute, datediff(minute, enters, lefttime), 0) as time)
from @MyTable

结果将是time类型,而不是varchar

答案 1 :(得分:3)

查看DATEDIFF函数。

DECLARE @enters datetime = CAST('2011-06-26T08:00:00' as datetime);
DECLARE @left datetime = CAST('2011-06-26T09:15:00' as datetime);

SELECT CAST(DATEDIFF(HH, @enters, @left) as varchar(max)) 
    + ':' + CAST(DATEDIFF(MI, @enters, @left) % 60 as varchar(max))

答案 2 :(得分:1)

select
     id
    ,enters
    ,[left]
    ,date
    ,[user]
    ,CONVERT(time,DATEADD(second, DATEDIFF(second,enters,[left]), 0)) as [Difference]
from
    MyTable

答案 3 :(得分:0)

  

简单的方法是

     

将DATE转换为时间数据类型

     

转换()

     

然后使用substring来查找   基于位置的差异

     

在substr(date,0,0)和time

之间