我在select语句中有以下内容:
CASE WHEN DATEADD(DAY, - 5, GETDATE()) > [Date] THEN '6+' ELSE NULL END AS Test
这很好,但也包括周末。如果今天的日期 - 5是>,我将如何计算计算部分的周末?日期?我想只用5个工作日,而不是周末。
答案 0 :(得分:1)
这将从您的CASE
CASE WHEN
(
(DATEADD(DAY, - 5, GETDATE()) > [Date])
AND
(DATEPART(WEEKDAY, DATEADD(DAY, - 5, GETDATE())) NOT IN (7,1))
)
THEN '6+' END AS Test
答案 1 :(得分:0)
我建议计算从[日期]到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