2015-10-13 45 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