摘要:[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本來就比較耗效能,如果不是一定要使用,還是能免則免為佳!