【发布时间】:2018-04-28 02:10:45
【问题描述】:
在 SQL-Server 数据库中存储单圈时间的最佳解决方案是什么?建议的格式应为01:52.525。我正在使用 time(3),但它不允许我使用 Avg() 函数。
最好的问候,
【问题讨论】:
-
您能否从您的问题中向我们提供更多详细信息?提供一些示例数据并期待结果。这真的很有帮助
标签: sql sql-server
在 SQL-Server 数据库中存储单圈时间的最佳解决方案是什么?建议的格式应为01:52.525。我正在使用 time(3),但它不允许我使用 Avg() 函数。
最好的问候,
【问题讨论】:
标签: sql sql-server
由于您已经将单圈持续时间存储为time,因此您可以使用DATEDIFF 计算平均持续时间(以毫秒为单位),并使用DATEADD 将毫秒转换为时间。
SELECT
AVG(DATEDIFF(millisecond, '', LapTime)) AS AvgLapTimeMilliseconds
, CAST(DATEADD(millisecond, AVG(DATEDIFF(millisecond, '', LapTime)), '') AS time(3)) AS AvgLapTime
FROM dbo.Lap;
【讨论】:
尝试以纪元毫秒为单位存储开始时间和持续时间(单圈时间),然后使用 SQL 查询(这将允许Avg()):
SELECT (duration - start) FROM lap_times (WHERE ...)
请参阅this answer,了解将毫秒转换为人类可读的时间戳。
【讨论】:
将时间存储为time。添加以毫秒为单位的计算列。使用计算列进行计算。
例如:
alter table t add laptime_ms as (datediff(ms, 0, laptime));
您现在可以将其用于平均值,并转换回时间为:
select convert(time, dateadd(ms, 0, avg(laptime_ms)))
from t
【讨论】: