在 SQL 中有条件地设置一个变量
Conditionally setting a variable in SQL
我正在尝试这样做:
- 如果 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()
谢谢
为了澄清,变量 @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
我正在尝试这样做:
- 如果 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()
谢谢
为了澄清,变量 @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