[SQL]IF clause within WHERE clause

  • 454
  • 0

摘要:[SQL]IF clause within WHERE clause

//隨手筆記
//大家在下Sql時一定常常會遇到Sql的where 條件是Dynamic的,
比如: 假如使用者所輸入的
                               "開始時間" 為空或空值,則忽略這一個where 條件 
                                                否則,where Column>="開始時間"
這種東西如果可以下在Storeprocedure或者function就太好了,是吧!
                                             
//範例如下
 
Declare @C1 nvarchar(10);
Declare @C2 nvarchar(10);
Declare @C3 nvarchar(8);
set @C1='欄位1';
set @C2='欄位2';
set @C3='20140101';
 
SELECT *
         FROM  dbo.TABLE
         WHERE    
         Col1=     --必須完全相等,nvarchar
              case when ISNULL(@C1,'')='' then
                   Col1
              else
                   @C1
              end
         and
         Col2 like --like 
             case when ISNULL(@ODL_ListName,'')='' then
                   '%%'
             else
                   '%'+@C2+'%'
             end
         and  
         convert(nvarchar(8),C3,112) >=  --DateTime  format:112 ==>20140101
             case when ISNULL(@C3,'')='' then
                  convert(nvarchar(8),C3,112)
             else
                  @C3
             end
 
//結論,雖然這個東西很好用,但是case when本來就比較耗效能,如果不是一定要使用,還是能免則免為佳!