2017-02-15 4 views
0

Wie kann ich die WHERE-Klausel einer SQL-Abfrage schreiben, die, wenn eine Variable einen Wert hat, diesen Wert verwendet und wenn die Variable leer ist, funktioniert als ob es nicht war Dort.SQL Where-Klausel Bedingung, wenn Variable leer ist oder nicht

So:

Allgemeine Abfrage:

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

Wenn $ Farbfilter einen Wert hat: $ Colorfilter = "blue" dann die Abfrage angegeben ausführen sollten, bevor dergleichen. Aber wenn $ Colorfilter ist leer: $ Color = „“ würde Ich mag nicht diese Klausel zu berücksichtigen:

Select * from table1 where size = $sizeFilter 

Wie kann ich schreiben, dass in allgemeiner Weise? Es scheint ein sehr geradliniges Problem zu sein, aber ich kann es nicht verstehen. Vielen Dank!

+2

'wo ($ Color = 'weiß' oder $ Colorfilter ist null) ... ' – jarlh

+0

Entschuldigung, ich habe die Frage bearbeitet, um es ein wenig klarer zu machen. – Mitteg

Antwort

0

Select * from table1 wo ($ Colorfilter = "" oder $ Color = 'weiß') und ($ sizeFilter = "" oder sizeFilter = $ 'mittel')

0

Sie können IFNULL für MYSQL verwenden, wenn Der Wert ist null und gibt den zweiten Parameter zurück.

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

ändern IFNULL isnull für MS Access und SQL Server, NVL für Oracle

+0

Brilliant. Der Schlüssel ist, dass, wenn $ colorFilter NULL ist, die where-Klausel wie "WHERE color = color" oder "WHERE true und genau das ist, was ich gesucht habe. Danke. – 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

oben Beispiel als MS Sql Server. Bitte für Beispielcode –

Verwandte Themen