![](/img/trans.png)
[英]Mysql list dates between date range but only on specific days of the week
[英]How to get the count of specific days from week between a date range in mysql?
我有一个包含列的表“ task_table”
Task_id,开始日期,结束日期
我还有一个“配置”表,其中包含记录,这些记录告诉一周中的哪几天是工作日。 该表有两列-
week_day,isHoliday
并且该表包含7条记录,因为week_days是Monday,Tuesday ..... Sunday,并且每条记录的条目都为1或0。如果在任何组织中某天是假日,则该日的日期为0。 就像组织每周在星期三和星期五放假一样,那么只有星期三和星期五为0。
现在,我想进行一个SQL查询以获取Task_id,Start_date,End_date以及每个任务消耗的总天数。 (这些天是任务开始日期和结束日期之间的天,不包括“配置”表中配置的假期。)
我现在没有时间完全回答这个问题,但是我要做的是:
获取在Start_date周开始时的日期,以及在End_date周结束时的日期(您可以通过date_add
加上一周中的天数来获取日期。
然后,您要对它们进行日期比较,除以7,再乘以2,然后删除要添加的任何内容(例如,如果开始日期为星期四,则需要从结果中删除一个,因为您已经计算了一个之前的星期三。
如果没有其他人提出更好的答案,我明天将代码写出来(到这很晚-大约从现在开始大约14个小时。)。
编辑:对,没有正确阅读问题,但是该策略仍然适用,但有些摆弄。 说到这, 这就是我的解决办法 。
归结为以下代码:
set @holidaysPerWeek = (select sum(isHoliday) from configuration);
select
Task_id,
((dateDiff(
DATE_ADD(End_Date, INTERVAL 7 - DayOfWeek(End_Date) DAY),
DATE_ADD(Start_Date, INTERVAL -DayOfWeek(Start_Date) + 1 Day)) + 1) / 7)
* @holidaysPerWeek
- (select sum(isHoliday) from configuration where week_day > DayOfWeek(End_Date))
- (select sum(isHoliday) from configuration where week_day < DayOfWeek(Start_Date)),
DayOfWeek(End_Date)
from task_table
这与我之前所说的完全一样,但是在整个星期中分布的“周末”数是可变的,方法是首先选择是否涵盖了整个星期的假期数,然后删除开始和结束之前或之后的假期日期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.