【问题标题】:Storing Lap Times SQL Server存储单圈时间 SQL Server
【发布时间】:2018-04-28 02:10:45
【问题描述】:

在 SQL-Server 数据库中存储单圈时间的最佳解决方案是什么?建议的格式应为01:52.525。我正在使用 time(3),但它不允许我使用 Avg() 函数。

最好的问候,

【问题讨论】:

  • 您能否从您的问题中向我们提供更多详细信息?提供一些示例数据并期待结果。这真的很有帮助

标签: sql sql-server


【解决方案1】:

由于您已经将单圈持续时间存储为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;
【解决方案2】:

尝试以纪元毫秒为单位存储开始时间和持续时间(单圈时间),然后使用 SQL 查询(这将允许Avg()):

SELECT (duration - start) FROM lap_times (WHERE ...)

请参阅this answer,了解将毫秒转换为人类可读的时间戳。

【讨论】:

    【解决方案3】:

    将时间存储为time。添加以毫秒为单位的计算列。使用计算列进行计算。

    例如:

    alter table t add laptime_ms as (datediff(ms, 0, laptime));
    

    您现在可以将其用于平均值,并转换回时间为:

    select convert(time, dateadd(ms, 0, avg(laptime_ms)))
    from t
    

    【讨论】:

      猜你喜欢
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 2016-08-04
      • 2011-03-12
      相关资源
      最近更新 更多