我在SQL Server中有一个表
id int,
enters time,
left time,
date datetime,
user varchar(50)
现在我希望得到enters
和lefts
之间的时差,但是我收到此错误消息:
Msg 8117,Level 16,State 1,Line 1
操作数数据类型时间对于减法运算符无效。
我怎样才能让时间过去? 例如,如果用户在8.00输入并在9.15离开,我需要得到1.15 我怎么能这样做?
答案 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
之间