在 SQL 中有条件地设置一个变量

Conditionally setting a variable in SQL

我正在尝试这样做:

我尝试了几种不同的方法,包括下面的两种方法。我对编程还很陌生,所以很可能我错过了一些相当简单的东西。基本上,我试图有条件地设置 @EndDate,具体取决于 @Day 的设置。

DECLARE @Day DATETIME

SET @Day = '09/2/17 12:50'  
SET @Day = DATEADD(dd, DATEDIFF(dd, 0, @Day), 0)

DECLARE @Enddate DATETIME

SET @Enddate = CASE @Day  
                  WHEN @Day < GETDATE() THEN GETDATE() - 1
               END

--SET @Enddate = @Day  
--     WHERE @Day < GETDATE()  
--SET @Enddate = GETDATE()-1    
--     WHERE@Day >= GETDATE()

谢谢

为了澄清,变量 @yesterday 添加为 DATE 没有时间

Declare @Day datetime

Set @Day = '09/02/17 12:50'
SET @Day = DATEADD(dd, DATEDIFF(dd, 0, @Day), 0)

Declare @Enddate Datetime

Declare @yesterday as date
SET @yesterday=dateadd(day,-1,getdate())

Set @Enddate = Case 
When @day<  @yesterday Then @day else @yesterday  End   

任何早于昨天的值保持不变,其他情况昨天设置

您正在混合两种可能的方式来编写 case 表达式...

您可以使用

CASE @day 
   WHEN GETDATE() THEN 'x' 
   WHEN DATEADD(DAY, 1, GETDATE() THEN 'y' 
END

或者您可以使用:

CASE 
   WHEN @day = GETDATE() THEN 'x' 
   WHEN @day > GETDATE() THEN 'y' 
END

正确的做法是:

SET @Enddate = CASE 
                  WHEN @Day < GETDATE() 
                     THEN DATEADD(DAY, -1, GETDATE())
                     ELSE GETDATE()
               END