在我的select语句中有以下内容:
CASE WHEN DATEADD(DAY, - 5, GETDATE()) > [Date] THEN '6+' ELSE NULL END AS Test
这很好,但也包括周末。在计算今天的日期- 5是否为>日期的部分中,我怎么能不把周末计算在内呢?我想只用5个工作日,而不是周末。
这将从您的CASE
中排除星期六和星期日:
CASE WHEN
(
(DATEADD(DAY, - 5, GETDATE()) > [Date])
AND
(DATEPART(WEEKDAY, DATEADD(DAY, - 5, GETDATE())) NOT IN (7,1))
)
THEN '6+' END AS Test
我建议计算从[Date]到GETDATE()的工作日,并在CASE表达式中对该数字应用任何标准。要计算工作日,为了简化表达式,您可以在FROM子句中添加以下两个交叉应用:
CROSS APPLY ( VALUES (
DATEDIFF(Day, 0, [Date]),
DATEDIFF(Day, 0, GETDATE())
)
) tmp (d1, d2)
CROSS APPLY ( VALUES (
tmp.d2 - tmp.d1 - (tmp.d2/7 - tmp.d1/7) - ((tmp.d2+1)/7 - (tmp.d1+1)/7)
)
) diff (workdays)
这样做之后,您的case表达式看起来像这样:
CASE WHEN diff.workdays > 5 THEN '6+' ELSE NULL END AS Test