2015-10-13 83 views
2

我在我的表中的日期列。我想所有的记录,其中相比于今天的日期的月数大于10,但我想申请这个条件只有当我的声明参数的值设为@parameter='Apply'。否则,我不想执行日期标准。使用IF条件在WHERE子句

我的结果应该是第一行,第二行和第三行,当@parameter ='Apply',否则如果@parameter是别的东西,那么所有四行都会返回。

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 
+0

相关:捉住所有查询(http://sqlinthewild.co.za/index.php/2009/03/19/catch - 所有查询/) –

回答

3

这将做同样的事情:

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

这将具有相同的输出,但是在SQL Server足够聪明的方式,有意义的优化呢? – ESG