T-SQL - 要查找的 WHERE 子句输入日期是下周还是当前季度

T-SQL - WHERE Clause to find enters where date is next week but also in current quarter

我有一个简单的 table 结构,其中包含分配给资源的任务:

| TASK | START_DATE | RESOURCE | CLOSED |

| T1 | 2018-10-10 00:00:00.000 | Bill | 0 |

| T2 | 2018-11-12 00:00:00.000 | Bob | 0 |

| T3 | 2018-11-17 00:00:00.000 | Ben | 0 |

我有一份报告旨在显示下周需要完成的任务,我当前的过滤器是:

WHERE CLOSED = 0 AND ((DATEPART(wk,Tasks.Start_Date) -1) = DATEPART(wk,getutcdate()) and DATEPART(YY,Tasks.Start_Date) = DATEPART(yy,getutcdate()))

当任务的开始日期在下周时,过滤器可以完美运行,但我也有 运行 每季度的任务被此过滤器排除。

有没有办法建立一个过滤器,包括本季度的所有任务以及下周的任务?例如,尽管开始日期已过 (2018-10-10 00:00:00.000),但标识为 T1 的任务仍未完成,我仍然需要它显示在我的报告中。

谢谢!

那么如果 closed 是 = 0 并且它是过去的?您可以执行 OR 语句:

WHERE CLOSED = 0 
AND (
    ((DATEPART(wk,Tasks.Start_Date) -1) = DATEPART(wk,getutcdate()) and DATEPART(YY,Tasks.Start_Date) = DATEPART(yy,getutcdate()))
    OR
    Tasks.Start_Date <= GetDate()  -- if using MS SQL
)

这将 return 您已经拥有的一切,但也会关闭 closed = 0 且 StartDate 已过去。

假设您使用的是 MSSQL,您可以使用下面的简化条件来提高可读性..:[=​​12=]

WHERE CLOSED = 0 
  AND Tasks.Start_Date < DATEADD(WEEK,1,GETDATE())

编辑:如果需要获取任务将在下周开始并且仅在本季度开始,因为上面的 where 子句带来了所有已经开始且 CLOSED=0 的任务,请使用以下内容:

WHERE CLOSED = 0 
  AND Tasks.Start_Date < DATEADD(WEEK,1,GETDATE())
  AND YEAR(Tasks.Start_Date) = YEAR(GETDATE())
  AND DATEPART(QUARTER, Tasks.Start_Date)=DATEPART(QUARTER, GETDATE())