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
.
,则同样适用
我需要在任何 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
.