2017-02-15 128 views
0

如何編寫WHERE子句的SQL查詢,如果變量具有值,則使用該值,如果該變量爲空白就如同它不是那裏。SQL Where子句條件(如果變量爲空或不爲空)

像這樣:

一般查詢:

Select * from table1 where color = $colorFilter and size = $sizeFilter 

如果$ colorFilter有一個值:$ colorFilter = 「藍色」那麼查詢應執行像以前一樣說。但是,如果$ colorFilter是空白的:$ colorFilter =「」我想沒有考慮到該條款:

Select * from table1 where size = $sizeFilter 

我怎麼能寫在一個通用的方法?這似乎是一個非常直接的問題,但似乎無法得到它。謝謝!

+2

'其中($ colorFilter = '白色' 或$ colorFilter爲null) ...' – jarlh

+0

對不起,我編輯了這個問題,使它更清楚一點。 – Mitteg

回答

0

選擇從表1 *,其中($ colorFilter = 「」 或者$ colorFilter = '白')和($ sizeFilter = 「」 或者$ sizeFilter = '媒體')

0

您可以使用IFNULL對於MySQL,如果該值爲空它將返回第二個參數。

Select * from table1 where color = IFNULL($colorFilter,color) and size = IFNULL($sizeFilter,size)

變化IFNULL到ISNULL爲MS訪問和SQL服務器,NVL爲Oracle

+0

輝煌。關鍵在於,當$ colorFilter爲NULL時,where子句就像「WHERE color = color」,或者「WHERE爲true,這就是我正在尋找的東西,謝謝。 – Mitteg

0

declare @ccmd nvarchar(max) 
 
    declare @colorFilter nvarchar(max) 
 
    declare @sizeFilter nvarchar(max) 
 
    set @ccmd='Select * from table1 where ' 
 
    if ltrim(rtrim(@colorFilter))='blue' 
 
    set @ccmd = @ccmd + ' color ='+ @colorFilter +' AND size ='+ @sizeFilter +'' 
 
    if ltrim(rtrim(@colorFilter))='' 
 
    set @ccmd = @ccmd + ' size='+ @sizeFilter +'' 
 
    EXECUTE sp_executesql @ccmd

+0

以上示例爲MS Sql Server。 –