繁体   English   中英

如何获取MySQL中日期范围之间从星期开始的特定天数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM