Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 工作日计算查询-工作但无法理解_Mysql_Database_Days - Fatal编程技术网

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

Mysql 工作日计算查询-工作但无法理解,mysql,database,days,Mysql,Database,Days,我想计算一年的工作日数(不包括星期六和星期日),并从web及其工作中获取此查询。但我无法从中间理解此查询。有人能帮助我理解此 SELECT 5 * (DATEDIFF('2015-12-31', '2015-01-01') DIV 7) + MID('0123444401233334012222340111123400012345001234550', 7 * WEEKDAY('2015-12-31') + WEEKDAY('2015-01-01') + 1, 1) 我无法从中

我想计算一年的工作日数(不包括星期六和星期日),并从web及其工作中获取此查询。但我无法从中间理解此查询。有人能帮助我理解此

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年是闰年,所以一年中还有一天。等等对于一年中每个可能的开始和结束日,长字符串编码要添加的工作日数的调整。我想这个字符串是通过反复试验发现的。

你能把这个查询的链接发到哪里去吗?@Tim:这里的解释是这样的:是的,在过去的10分钟里盯着这个查询看确实很痛苦。多亏了上面@Bioshade的链接,我发现长字符串没有反复试验,而是有一些逻辑。哦,我很高兴能帮助你,罗斯:P