有条件地在SQL中设置变量

时间:2017-09-04 18:02:19

标签: sql if-statement case-statement

我正在尝试这样做:

  • 如果Day参数是当天,则将@EndDate设置为昨天
  • 如果Day参数是将来,请将@EndDate设置为昨天。

我尝试过几种不同的方法,包括下面的两种方法。我对编程很新,所以很可能我错过了一些相当简单的东西。基本上,我尝试有条件地设置@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()

谢谢

2 个答案:

答案 0 :(得分:1)

为了澄清,变量@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   

任何比昨天更早的值保持不变,昨天的其他案例集

答案 1 :(得分:1)

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

您可以使用

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