0

我的选择语句中有以下内容:

CASE WHEN DATEADD(DAY, - 5, GETDATE()) > [Date] THEN '6+' ELSE NULL END AS Test

这很好用,但它也包括周末。如果今天的日期 - 5 是 > 日期,我将如何在计算部分中不计算周末?我只想使用 5 个工作日,而不是周末。

4

2 回答 2

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
于 2013-02-28T21:23:51.113 回答
0

我建议计算从 [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
于 2018-06-30T21:06:08.930 回答