Jam*_*rry 3 sql sql-server sql-server-2005 sql-server-2008
我需要计算数据库中事件的"活动分钟数".开始时间众所周知.
复杂的是,这些活跃的会议记录只应计算在工作日 - 周一至周五上午9点至下午6点30分,不包括周末和(已知)假日日列表
开始或"当前"时间可能在工作时间之外,但仍然只计算工作时间.
这是SQL Server 2005,因此可以使用T-SQL或托管程序集.
如果你想这样做纯SQL这里是一种方法
CREATE TABLE working_hours (start DATETIME, end DATETIME);
Run Code Online (Sandbox Code Playgroud)
现在用可数周期填充工作时间表,每年约250行.
如果你有一个事件(@event_start,@ event_end)将开始工作时间并结束时间,然后简单的查询
SELECT SUM(end-start) as duration
FROM working_hours
WHERE start >= @event_start AND end <= @event_end
Run Code Online (Sandbox Code Playgroud)
就足够了.
另一方面,如果事件在工作时间内开始和/或结束,则查询更复杂
SELECT SUM(duration)
FROM
(
SELECT SUM(end-start) as duration
FROM working_hours
WHERE start >= @event_start AND end <= @event_end
UNION ALL
SELECT end-@event_start
FROM working_hours
WHERE @event_start between start AND end
UNION ALL
SELECT @event_end - start
FROM working_hours
WHERE @event_end between start AND end
) AS u
Run Code Online (Sandbox Code Playgroud)
笔记:
编辑:在MSSQL中,你可以使用DATEDIFF(mi,start,end)来获得上面每个减法的分钟数.