我的选择语句中有以下内容:
CASE WHEN DATEADD(DAY, - 5, GETDATE()) > [Date] THEN '6+' ELSE NULL END AS Test
这很好用,但它也包括周末。如果今天的日期 - 5 是 > 日期,我将如何在计算部分中不计算周末?我只想使用 5 个工作日,而不是周末。
我的选择语句中有以下内容:
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