如何对多个time(7)类型列求和并更新TotalDuration列?
解决方案:计算并更新TIME类型列的总时长
在SQL Server中,直接对TIME(7)类型的列做加法运算会受限于该类型的范围(最大值为23:59:59.9999999),超过24小时的总和会报错或自动取模。正确的处理方式是先将每个TIME值转换为可求和的数值,计算总和后再转回TIME类型。
更新语句
假设你的表名为YourTableName,执行以下语句即可更新TotalDuration列:
UPDATE YourTableName SET TotalDuration = CAST( DATEADD(SECOND, DATEDIFF(SECOND, 0, Duration1) + DATEDIFF(SECOND, 0, Duration2) + DATEDIFF(SECOND, 0, Duration3) + DATEDIFF(SECOND, 0, Duration4), 0 ) AS TIME(7) )
代码说明
DATEDIFF(SECOND, 0, DurationX):把每个TIME(7)值转换为从00:00:00开始计算的总秒数,将时间值转为可直接相加的数值。- 对四个列的总秒数求和,得到所有时长的总秒数。
DATEADD(SECOND, 总秒数, 0):将总秒数转换回DATETIME类型,再通过CAST转为TIME(7)类型,得到最终的总时长。
注意事项
如果四个时长的总和超过24小时,TIME类型会自动对24取模(例如25小时会显示为01:00:00.0000000)。若需要保留超过24小时的完整时长(如显示25:30:00),则不能使用TIME类型存储总时长,建议改用DATETIME类型,或拆分存储天数、小时数等单独列。
内容的提问来源于stack exchange,提问作者neptr
相关产品推荐
相关产品推荐

