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

时间:2013-02-28 21:19:46

标签: sql sql-server sql-server-2008

我在select语句中有以下内容:

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

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

2 个答案:

答案 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