如何在SQL中计算两个日期之间的非工作日?

问题描述 投票:0回答:1

我想根据办公室ID来查询两个日期之间的自定义非工作日(某些办公室可能有星期六和星期日工作,其他办公室可能有工作)。

我有一个名为tbOfficeSchedule的表,用于存储办公室的日程表。

我有开始日期和结束日期,我必须找出这些日期之间有多少个非工作日。

示例:tbOfficeSchedule

假设tbOfficeSchedule将星期一和星期六作为办公室的非工作日。

我的开始日期为2020年5月29日-星期五,结束日期为2020年6月16日,星期二。

我希望查询计算任何两个日期(包括日期)之间的非工作日。

在上面的示例中,查询应返回6作为非工作日。

mysql sql calculation dayofweek days
1个回答
0
投票

这里的一种方法是使用日历表,其中包含要考虑的范围内的所有日期。一旦有了它,您只需要简单地连接到您的办公室计划表,然后进行聚合:

SELECT
    t.OfficeID,
    COUNT(*) AS cnt
FROM
(
    SELECT '2020-01-01' AS dt UNION ALL
    SELECT '2020-01-02' UNION ALL
    ...
    SELECT '2020-12-31'     -- assuming you want to cover the entire year 2020
) d
INNER JOIN tbOfficeSchedule t
    ON DAYNAME(d.dt) = t.DayOfWeek
WHERE
    t.Working = 1
GROUP BY
    t.OfficeID;

我用别名d内联的子查询是“日历”表的代理,因为它保存了一堆在某个范围内的日期。除了我展示的内容外,还有许多(更好的方法)可以生成日历表,但是该主题已经在本网站上进行了深入介绍。

© www.soinside.com 2019 - 2024. All rights reserved.