这是一个问题。我需要找到两个日期之间的工作日(没有周末)。我目前发现并能够成功使用这种方法:
SELECT 5 * (DATEDIFF(DateClosed, DateOpened) DIV 7) + MID('0123455501234445012333450122234501101234000123450',
7 * WEEKDAY(DateOpened) + WEEKDAY(DateClosed) + 1, 1) AS TotalResolutionTimeBusinessDays
FROM table1
这是一个基于矩阵的复杂计算:
| M T W T F S S
-|--------------
M| 0 1 2 3 4 5 5
T| 5 0 1 2 3 4 4
W| 4 5 0 1 2 3 3
T| 3 4 5 0 1 2 2
F| 2 3 4 5 0 1 1
S| 0 1 2 3 4 0 0
S| 0 1 2 3 4 5 0
在矩阵中,任何给定的x和y值对(WEEKDAY(@S)和WEEKDAY(@E)的交集产生两个值之间的工作日差异。表中的49个值连接到以下字符串:0123455501234445012333450122234501101234000123450
。
这对我来说很好,但现在我需要以另一种格式呈现日期之间的差异。例如:假设我们有两个日期:StartDate ='2013-06-28 01:27:35',EndDate ='2013-07-08 16:47:21'。如果我们使用上述方法,我们将获得7个工作日,这是正确的。但我需要计算日期之间的所有差异(包括小时和分钟),以便它看起来像
SELECT TIME_TO_SEC(TIMEDIFF('2013-07-08 16:47:21','2013-06-28 01:27:35')) / 3600 / 24
没有周末的应该是7.64天的价值。
有关如何根据该格式编写计算的任何建议吗?任何帮助将不胜感激。