2017-09-14 3 views
0

Comment faire pour additionner deux fois le type de données dans t-sql?Comment faire une somme des types de données time (7) dans T-SQL?

declare @fTime time(7)='05:22'; 
declare @tTime time(7)='06:00'; 
declare @result time(7); 

Je l'ai utilisé mais cela ne fonctionne pas.

set @result=sum(@[email protected]); 
+0

Les durées sont des moments et non des durées. vous voulez probablement qu'ils signifient des durées, sinon ajouter serait inutile? ou ajouter deux fois par jour, mais qu'en est-il du carry quand il s'enroule? – dlatikay

+0

@dlatikay oui, s'il vous plaît – motevalizadeh

+0

duplication possible de [Opérande type de données de temps n'est pas valide pour l'opérateur d'ajout] (https://stackoverflow.com/questions/17578852/operand-data-type-time-is-invalid-for-add- opérateur) – dlatikay

Répondre

1

Vous pouvez ajouter les minutes de l'un à l'autre comme ceci:

select dateadd(minute,datediff(minute,'00:00',@tTime),@fTime) 

Toutefois, notez que le commentaire par dlatikay est correcte, time(7) n'est pas pour des durées. Il serait préférable de stocker les durées sous forme d'entier, par exemple en stockant des minutes ou des secondes.

0

Pouvez-vous utiliser quelque chose comme ça?

DECLARE @fTime TIME(7) = '05:22'; 
DECLARE @tTime TIME(7) = '06:00'; 
DECLARE @result TIME(7); 

SELECT @result = CAST([Hours] AS NVARCHAR) + ':' + CAST([Minutes] AS 
NVARCHAR) 
FROM (
SELECT cast(TotalTime AS INT)/60 AS [Hours] 
    ,CAST(TotalTime AS INT) % 60 AS [Minutes] 
FROM (
    SELECT fTime + tTime AS TotalTime 
    FROM (
     SELECT cast(SUBSTRING(cast(@ftime AS NVARCHAR), 1, 2) AS INT) * 60 + 
CAST(substring(cast(@ftime AS NVARCHAR), 4, 2) AS INT) AS fTime 
      ,cast(SUBSTRING(cast(@tTime AS NVARCHAR), 1, 2) AS INT) * 60 + 
CAST(substring(cast(@tTime AS NVARCHAR), 4, 2) AS INT) AS tTime 
     ) x 
    ) y 
) z 

SELECT @result