在WHERE子句中使用IF条件

时间:2015-10-13 23:37:20

标签: sql-server

我的表格中有一个日期列。我想获得与今天的日期相比的月数大于10的所有记录,但我想仅在我声明的参数具有值@parameter='Apply'时应用此条件。否则,我不想强​​制执行日期标准。

我的结果应该是@parameter ='Apply'时的第1行,第2行和第3行,否则如果@parameter是其他行,那么将返回所有4行。

  GetDate         Val
------------     -----
 1/12/2013         A
 1/12/2012         B
 1/12/2014         C
 1/12/2015         D

以下按预期工作,但有大量冗余代码。有没有办法把if条件放在where子句中?

DECLARE @parameter VARCHAR(10)='Apply'
if(@parameter='Apply')
begin
select * from testTable where
    DATEDIFF(MONTH,GetDate,GETDATE()) >10
end
else
begin
    select * from testTable
end

1 个答案:

答案 0 :(得分:3)

这将做同样的事情:

select * 
from testTable 
where (DATEDIFF(MONTH,GetDate,GETDATE()) >10 AND @parameter='Apply')
OR @parameter <> 'Apply'