我需要获得"工作日"在任何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,同样将最后一个日期作为星期六。 但是如果第一个约会是星期六而且上次约会是星期日怎么办?
答案 0 :(得分:4)
最后一行删除了部分周,只有当开始日期属于星期日而最后一个日期属于星期六时才会发生。
第二行(DATEDIFF(wk, '2015-01-04', '2015-01-10') * 2)
计算整个周末,即Saturday-Sunday
对。因此,在您的问题中,如果第一个日期是Saturday
,那么它将计为一个Saturday-Sunday
对。如果最后一个日期属于Sunday
,则会应用相同的内容。