在DATEADD区间中使用case表达式

时间:2015-09-18 08:46:34

标签: sql sql-server case dateadd

是否可以在DATEADD区间参数中使用case表达式?

select DATEADD(case c1 when 1 then HOUR when 2 then DAY end, c2, date) from T

Update1 :抱歉,我想在where子句

中使用它
select * from T where DATEADD(case c1 when 1 then HOUR when 2 then DAY end, c2, date) < GETDATE()

也许还有另一种选择。

提前致谢,

3 个答案:

答案 0 :(得分:3)

尝试以下..

select * from T 
where case c1 when 1 then DATEADD(HOUR, c2, date) 
when 2 then DATEADD(DAY, c2, date) 
end < Getdate()

答案 1 :(得分:2)

不,您无法参数化DATEADDdatepart参数:

  

下表列出了所有有效的 datepart 参数。用户定义的变量等效项无效。

您必须使用两个不同的DATEADD表达式,或更改您的逻辑:

select DATEADD(hour, c2 * case c1 when 1 then 1 when 2 then 24 end, date) from T

答案 2 :(得分:0)

您可以在没有CASE

的情况下进行查询
select * from T 
where c1=1 AND DATEADD(hour, c2, date) < getdate()
or c1=2 AND DATEADD(day, c2, date) < getdate()