SQL 获取两个日期之间的工作日数

SQL to get number of working days between two dates

我需要在任何 2 个给定日期之间获取 "Working days" 的数量,为此我尝试了这个查询,它运行良好,但我无法理解它的一部分。请任何人向我解释一下:

SELECT (DATEDIFF(dd, '2015-01-04', '2015-01-10') + 1)-
        (DATEDIFF(wk, '2015-01-04', '2015-01-10') * 2)-
        (CASE WHEN DATENAME(dw, '2015-01-04') = 'Sunday' THEN 1 ELSE 0 END)-
        (CASE WHEN DATENAME(dw, '2015-01-10') = 'Saturday' THEN 1 ELSE 0 END)

我知道这么多:

现在我对最后两行感到困惑。它检查第一个日期是否是星期日,然后从总数中减去 1,同样最后一个日期是星期六。 但是,如果第一次约会是周六,最后一次约会是周日怎么办?

最后一行删除了部分周,只有当开始日期为星期日而最后日期为星期六时才会发生这种情况。

第二行(DATEDIFF(wk, '2015-01-04', '2015-01-10') * 2)计算整个周末,即Saturday-Sunday对。所以在你的问题中,如果第一个日期是 Saturday ,那么它将算作一对 Saturday-Sunday 。如果最后一个日期落在 Sunday.

,则同样适用