如何计算从今天算起的工作日是否超过6天?



在我的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

最新更新