Comment get un time entre deux colonnes de type heure?

J'ai une table dans SQL Server

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

Maintenant, je veux get le décalage horaire entre les inputs et les lefts mais je reçois ce message d'erreur:

Msg 8117, niveau 16, état 1, ligne 1
L'heure du type de données d'opérande n'est pas valide pour l'opérateur de soustraction.

Comment puis-je get le time a passé?
Par exemple, si l'user entre à 8h00 et quitte à 9h15, je dois get 1,15.
Comment puis-je faire ceci?

 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 

[MODIFIER]

Ajouté 0 padding pour éviter d'afficher 1:5 , au lieu de 1:05 .


Une autre façon de faire ceci:

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

Le résultat sera du type time , pas varchar .

Regardez la fonction 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)) 
 select id ,enters ,[left] ,date ,[user] ,CONVERT(time,DATEADD(second, DATEDIFF(second,enters,[left]), 0)) as [Difference] from MyTable 

La méthode simple est

convertir le type de données DATE en time

convertir()

puis utilisez la sous-string pour find la différence en fonction de la position

entre substr (date, 0,0) et l'heure