【发布时间】:2014-07-12 16:59:50
【问题描述】:
这与此处发现的问题类似...
Count work days between two dates
最大的区别是我需要以小时为单位计算我的范围,并且我需要考虑部分天数,其中一些可能是周末。例如,我看到的大多数代码示例都将周六和周日作为一个整体,像这样返回范围内非周末的总天数......
SELECT @WeekDays =
(DATEDIFF(dd, @StartDate, @EndDate) + 1)
-(DATEDIFF(wk, @StartDate, @EndDate) * 2)
-(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END)
我需要这样的东西,但要按小时计算。大多数论坛/解决方案都会让我将周末天数乘以 24,如果我输入“星期六中午”到“星期一下午 6 点”之类的内容,这将不起作用。我会从总小时数中减去 48 小时,而不是 36 小时。
为了记录,我现在正在这样做以获取范围内的所有小时...
SELECT @HourCount = DATEDIFF(hh, @StartDate, @EndDate)
我愿意一次性正确计算它,也可以使用上面的@HourCount 并减去该范围内的“周末小时数”。只是不知道如何准确地做到这一点。
最后一点,最重要的效率。从技术上讲,我可能会使用 while 循环并从 @StartDate 迭代到 @EndDate,同时增加小时(甚至分钟),检查当天,如果不是周末,则将总数加 1。这可能是我最糟糕的情况,但我正在寻找一种比这更有效的解决方案。欢迎任何建议或解决方案。
【问题讨论】:
-
您使用的是哪个 SQL Server 版本?
标签: sql sql-server date datetime