2017-09-14 1 views
0

Wie zwei mal Datentyp in T-Sql summieren?Wie Summen Zeit (7) Datentypen in T-SQL?

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

Ich habe das verwendet, aber es funktioniert nicht.

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

Zeiten sind Zeitpunkte, keine Dauer. Sie wollen wahrscheinlich, dass sie Dauer bedeuten, sonst wäre das Hinzufügen sinnlos? oder füge zwei Tageszeiten hinzu, aber was ist mit dem Tragen, wenn es umschlingt? – dlatikay

+0

@dlatikay ja, bitte – motevalizadeh

+0

Mögliches Duplikat von [Operand Datentyp time ist ungültig für add operator] (https://stackoverflow.com/questions/17578852/operand-data-type-time-is-invalid-for-add- Bediener) – dlatikay

Antwort

1

Sie könnten die Minuten von einem zum anderen hinzufügen wie folgt:

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

Beachten Sie jedoch, dass der Kommentar von dlatikay korrekt ist, wird time(7) nicht für Zeiträume gemeint. Es wäre besser, die Dauer als Ganzzahl zu speichern, zum Beispiel durch Speichern von Minuten oder Sekunden.

0

Können Sie so etwas verwenden?

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