2017-09-14 177 views
0

如何在t-sql中总结两次数据类型?如何在T-SQL中总结时间(7)数据类型?

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

我用这个,但它不起作用。

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

是时间点,而不是持续时间。你可能希望它们意味着持续时间,否则加入将毫无意义?或者每天增加两次,但是当它进行周转时,该怎么办呢? – dlatikay

+0

@dlatikay是的,请 – motevalizadeh

+0

[操作数数据类型时间可能重复添加操作符无效](https://stackoverflow.com/questions/17578852/operand-data-type-time-is-invalid-for-add-运营商) – dlatikay

回答

1

你可以像这样一个的分钟添加到其他:

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

但是,请注意,由dlatikay的评论是正确的,time(7)并不意味着持续时间。将持续时间存储为整数会更好,例如通过存储分钟或秒。

0

你能用这样的东西吗?

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