星期一从周五到周日,仅在前一天的其他工作日提取数据

时间:2016-03-17 13:14:58

标签: sql sql-server

我有这个查询,它正在从SQL Server数据库中提取所有在前一个工作日关闭的事件。它非常整洁,因为它使用modulo独立于@@ DATEFIRST本地设置。但是我需要修改它,在周一它给我所有事件在星期五和星期日之间关闭。

当前代码:

SELECT 
    inc.Incident_Id, inc.Close_Time
FROM 
    inc
WHERE 
    CONVERT (CHAR(10), inc.Close_Time, 126) = CONVERT (CHAR(10), (DATEADD(DAY, CASE (DATEPART(WEEKDAY, GETDATE()) + @@DATEFIRST) % 7 
                        WHEN 1 THEN -2 
                        WHEN 2 THEN -3 
                        ELSE -1 
                        END, DATEDIFF(DAY, 0, GETDATE()))),126)

我在第一次CONVERT之前尝试使用另一个CASE DATEPART(WEEKDAY, GETDATE()),但它看起来不像> =和< =(或BETWEEN& AND)在这之后的一个条件下都不允许。

总结一下,它应该是这样的:

  • 星期一 - 事件在星期五和星期日之间关闭
  • 在其他工作日 - 事件在前一天结束

1 个答案:

答案 0 :(得分:0)

试试这个:

DECLARE @from date = 
    DATEADD(day, 
      CASE datediff(d, 0, getdate()) %7
           WHEN 0 THEN -3
           WHEN 6 THEN -2
           ELSE -1
      END, getdate())

SELECT inc.Incident_Id, inc.Close_Time
FROM inc  
WHERE 
  inc.Close_Time >= @from
  AND inc.Close_Time < @to

周一和周日将在周五和之后返回

星期二到星期六将在前一天返回。