C# 是否可以在SQL Server中汇总时间字段?

C# 是否可以在SQL Server中汇总时间字段?,c#,sql,sql-server,C#,Sql,Sql Server,我在一行中有3个时间(0)列。我想自动计算到达时间列,这是出发时间+持续时间之和的结果 Departure-Time= 14:30:00 Duration: = 02:45:00 Arrival must be = 17:15:00 是否可以使用触发器或计算面积法?提前感谢SQL Server不支持直接添加时间值;但是,您可以对0使用datediff来计算持续时间的多少(某些间隔-分钟、秒等;选择取决于您所需的精度),然后dateadd相同: 声明@start time='14:30

我在一行中有3个时间(0)列。我想自动计算到达时间列,这是出发时间+持续时间之和的结果

Departure-Time= 14:30:00
Duration:     =  02:45:00
Arrival must be = 17:15:00

是否可以使用触发器或计算面积法?提前感谢

SQL Server不支持直接添加时间值;但是,您可以对
0
使用
datediff
来计算持续时间的多少(某些间隔-分钟、秒等;选择取决于您所需的精度),然后
dateadd
相同:

声明@start time='14:30:00',@duration time='02:45:00';
声明@end time=dateadd(秒,datediff(秒,0,@duration),@start);
选择@end;--17:15:00.0000000

SQL Server不支持对
时间
值进行直接添加;但是,您可以对
0
使用
datediff
来计算持续时间的多少(某些间隔-分钟、秒等;选择取决于您所需的精度),然后
dateadd
相同:

声明@start time='14:30:00',@duration time='02:45:00';
声明@end time=dateadd(秒,datediff(秒,0,@duration),@start);
选择@end;--17:15:00.0000000

您的数据在表中。可以向表中添加计算列,以便始终正确计算到达时间:

alter table t add column arrival_time as
    (convert(time, convert(datetime, departure_time) + convert(datetime, duration));
这样,在查询表时,值总是正确的


注意:由于某些无法解释的原因,SQL Server允许您添加
datetime
值,但不允许添加
time
值(以及其他组合)。这也适用于午夜,因此
23:00:00+02:00:00
01:00:00
,而不是生成错误。

您的数据在表中。可以向表中添加计算列,以便始终正确计算到达时间:

alter table t add column arrival_time as
    (convert(time, convert(datetime, departure_time) + convert(datetime, duration));
这样,在查询表时,值总是正确的


注意:由于某些无法解释的原因,SQL Server允许您添加
datetime
值,但不允许添加
time
值(以及其他组合)。这也适用于午夜,因此
23:00:00+02:00:00
01:00:00
,而不是生成错误。

我正在为我的案例分享一种简便的解决方案。你可以跟着图片走。谢谢大家


我正在为我的案例分享一个简单的解决方案。你可以跟着图片走。谢谢大家


不可能直接对时间列求和。但是,如果要对行间的持续时间(即时间(7)数据类型)求和,可以将时间转换为秒(或毫秒),进行求和,然后再转换回时间

CAST(DATEADD(SECOND, SUM(DATEDIFF(SECOND, '1900-01-01', CAST(YOUR_DURATION_TIME_COLUMN AS DATETIMEOFFSET))), 0) AS TIME(7))
    
CAST(DATEADD(MILLISECOND, SUM(DATEDIFF(MILLISECOND, '1900-01-01', CAST(YOUR_DURATION_TIME_COLUMN AS DATETIMEOFFSET))), 0) AS TIME(7))

不可能直接对时间列求和。但是,如果要对行间的持续时间(即时间(7)数据类型)求和,可以将时间转换为秒(或毫秒),进行求和,然后再转换回时间

CAST(DATEADD(SECOND, SUM(DATEDIFF(SECOND, '1900-01-01', CAST(YOUR_DURATION_TIME_COLUMN AS DATETIMEOFFSET))), 0) AS TIME(7))
    
CAST(DATEADD(MILLISECOND, SUM(DATEDIFF(MILLISECOND, '1900-01-01', CAST(YOUR_DURATION_TIME_COLUMN AS DATETIMEOFFSET))), 0) AS TIME(7))

请标记相应的数据库。SQL是标准的查询语言,而不是数据库。您的问题的答案取决于您正在使用的数据库。当然,但这不是“为我做”服务。我们需要知道您尝试了什么以及在哪里遇到任何问题。时间字段?时间值有小时字段、分钟字段和秒字段。
time
类型用于存储一天中的时间,而不是时间跨度。这些是不同的概念,把一天中的时间加在一起是没有意义的。@jarlh不,没有;SQL中的单个值没有“字段”;时间字段最终只是一个整数-在基础值后面有一些含义(还有:
time
的精度比秒更高),请标记相应的数据库。SQL是标准的查询语言,而不是数据库。您的问题的答案取决于您正在使用的数据库。当然,但这不是“为我做”服务。我们需要知道您尝试了什么以及在哪里遇到任何问题。时间字段?时间值有小时字段、分钟字段和秒字段。
time
类型用于存储一天中的时间,而不是时间跨度。这些是不同的概念,把一天中的时间加在一起是没有意义的。@jarlh不,没有;SQL中的单个值没有“字段”;时间字段最终只是一个整数-在基本值后面有一些含义(而且:
time
的精度比秒还要高),这对我很有用。我不得不做很多时差计算,但这对我来说是新的。现在我可以集中讨论这个例子了,非常感谢。它对我很有用。我不得不做很多时差计算,但这对我来说是新的。现在我可以集中讨论这个例子了,非常感谢。