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

时间:2015-06-30 05:27:27

标签: sql sql-server database days

我需要获得"工作日"在任何2个给定日期之间,为此目的,我尝试了这个查询,它完美地运行,但我无法理解它的一部分。请有人向我解释一下:

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,同样将最后一个日期作为星期六。 但是如果第一个约会是星期六而且上次约会是星期日怎么办?

1 个答案:

答案 0 :(得分:4)

最后一行删除了部分周,只有当开始日期属于星期日而最后一个日期属于星期六时才会发生。

第二行(DATEDIFF(wk, '2015-01-04', '2015-01-10') * 2)计算整个周末,即Saturday-Sunday对。因此,在您的问题中,如果第一个日期是Saturday,那么它将计为一个Saturday-Sunday对。如果最后一个日期属于Sunday,则会应用相同的内容。