工作日计算查询-工作但无法理解
working days calculation query - working but not able to understand
我想计算一年的工作日数(仅不包括星期六和星期日),并从网上获得了这个查询及其工作..但我无法从 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)
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 年是闰年,所以这一年多了一天。等等。对于一年中每个可能的开始日和结束日,长字符串对要添加多少个工作日的调整进行编码。我想这个字符串是通过反复试验发现的。
我想计算一年的工作日数(仅不包括星期六和星期日),并从网上获得了这个查询及其工作..但我无法从 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)
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 年是闰年,所以这一年多了一天。等等。对于一年中每个可能的开始日和结束日,长字符串对要添加多少个工作日的调整进行编码。我想这个字符串是通过反复试验发现的。