SQL WHERE取决于星期几

时间:2016-11-25 10:55:43

标签: sql case where sql-server-2016 dayofweek

我需要检查不同日期的记录,具体取决于当前的哪一天。

在星期五,我需要看整个下周,直到下周日。在任何其他日子,它应该检查当前周,直到即将到来的星期天。

我目前有以下内容但由于语法错误而无法正常工作。是否可以在CASE WHEN条款中执行WHERE

WHERE
    T0.[Status] IN ('R','P') 
    AND
        CASE 
           WHEN DATEPART(weekday,GETDATE()) = '5' 
              THEN T0.[DueDate] >= GETDATE() AND <= DATEADD(day, 15 - DATEPART(weekday, GetDate()), GetDate())
           WHEN DATEPART(weekday, GETDATE()) != '5' 
              THEN T0.[DueDate] >= GETDATE() AND <= DATEADD(DAY ,8- DATEPART(weekday, GETDATE()), GETDATE())
        END

2 个答案:

答案 0 :(得分:3)

使用一系列逻辑orand运算符创建此逻辑要容易得多:

WHERE
T0.[Status] IN ('R','P') AND
((DATEPART(weekday,GETDATE()) = '5' AND 
  T0.[DueDate] >= GETDATE() AND 
  T0.[DueDate] <= DATEADD(day, 15 - DATEPART(weekday, GetDate()), GetDate())) OR
 (DATEPART(weekday,GETDATE()) != '5' AND 
  T0.[DueDate] >= GETDATE() AND 
  T0.[DueDate] <= DATEADD(DAY ,8- DATEPART(weekday,GETDATE()),GETDATE())
)

答案 1 :(得分:1)

您的语法错误,您在bindingKey子句中使用条件评估而不是assignemnet

THEN

或内部案例

  WHEN DATEPART(weekday,GETDATE()) = '5' THEN  Your_column1  ELSE your_column2 END
  ......