我使用以下sql来计算第一个查询的持续时间。
CDate(TimeSerial(Val([EndTime])\100,Val([EndTime]) Mod 100,0)-TimeSerial(Val([StartTime])\100,Val([StartTime]) Mod 100,0))) AS Duration
现在,我想在另一个查询中进一步计算一周内不同课程的总时间。像sum(iif(lesson =“ math”,duration,0))
但是既然是时候了,数据类型sql server不允许我使用sum函数。
我尝试了以下sql。
sum(hour(duration) + minute(duration)) AS Total_time
但这不是我期望的,因为我希望保留一些标准的原始格式。
是否有一种整洁的方法?谢谢。
答案 0 :(得分:1)
我建议只接受以秒或十进制小时为单位的总时间:
select datediff("s", starttime, endtime) as diff_seconds,
datediff("s", starttime, endtime) / (60 * 60.0) as diff_hours
答案 1 :(得分:1)
首先,只需获取数字持续时间:
TimeSerial(Val([EndTime])\100,Val([EndTime]) Mod 100,0)-TimeSerial(Val([StartTime])\100,Val([StartTime]) Mod 100,0) AS Duration
这可以求和并转换为DateTime:
CDate(Sum([duration])) AS Total_time
示例:
数据:
查询:
SELECT
StartTime,
EndTime,
TimeSerial(Val([EndTime])\100,Val([EndTime]) Mod 100,0)-TimeSerial(Val([StartTime])\100,Val([StartTime]) Mod 100,0) AS Duration
FROM
tTest;
SELECT
Count(*) AS Slots,
CDate(Sum([Duration])) AS TotalHours
FROM
qTest;
结果: