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