工作日计算查询 - 工作但无法理解

时间:2015-07-22 06:54:31

标签: mysql database days

我想计算一年的工作日数(不包括星期六和星期日),并从网上获取此查询及其工作情况..但我无法从MID部分了解此查询..任何人都可以帮助我了解这一点...

SELECT 5 * (DATEDIFF('2015-12-31', '2015-01-01') DIV 7) +
    MID('0123444401233334012222340111123400012345001234550', 7 * WEEKDAY('2015-12-31') +
    WEEKDAY('2015-01-01') + 1, 1)

我无法理解

MID('0123444401233334012222340111123400012345001234550', 7 * WEEKDAY('2015-12-31') +
WEEKDAY('2015-01-01') + 1, 1)

1 个答案:

答案 0 :(得分:3)

WEEKDAY('2015-12-31')WEEKDAY('2015-01-01')计算一年中开始和结束的星期几,其中0 =星期一,6 =星期日。 2015年,这些都是6(星期日)。所以MID的中间论点是7 * 6 + 6 + 1,或49。

长字符串的第49个字符是0。所以这意味着它将为表达式的其余部分添加零。

此表达式的目的是根据一年中第一天和最后一天的星期几来调整工作日计数。在2015年,没有一个是工作日,所以它增加了零。现在考虑2016. 2016年1月1日是星期一(weekday=1),2016年12月31日是星期二(weekday=2)。 7*1+2+1等于10.长字符串的第十个字符是1。所以它会增加一个工作日...直觉上我们可以看到这种情况发生,因为2016年是闰年,所以今年还有一天。等等。对于一年中每个可能的开始和结束日,长字符串编码调整要添加的工作日数。我想这个字符串是通过反复试验发现的。