我需要获取任意两个给定日期之间的“工作日”数,为此,我尝试了此查询,该查询非常有效,但我无法理解其中的一部分。请任何人向我解释:
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,最后一个日期同样为星期六。但是,如果第一个日期是SATURDAY而最后一个日期是SUNDAY,该怎么办?
最后一行删除部分星期,只有在开始日期为星期日,而最后日期为星期六时才发生。
第二行(DATEDIFF(wk, '2015-01-04', '2015-01-10') * 2)
是整个周末,是一Saturday-Sunday
对。因此,在您的问题中,如果第一个日期是a Saturday
,那么它将被视为一Saturday-Sunday
对。如果最后一个日期位于上,则将应用相同的内容Sunday
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句