2016-05-20 27 views
1

SQLiteクエリでCASE文を使用することができますが、WHERE句にCASE文を作成する方法がわかりません。WHERE句のSQLite if文

実は私は長いWHERE句(これは質問に関係ほんの一部である)でこれを持っている:場合

AND (%d >= (wines.year + wines.maturity)) 

=>:

AND (%d >= (wines.year + wines.maturity)) AND (%d < (wines.year + wines.apogee)) 

実際に私はちょうどそれをしたいです

:wines.apogeeも

またはNULL IS

=> wines.apogeeはwines.apogeeがNULLでないかどうかをテストし、この場合は、要求の第二部を追加するには、この場合にはCASEステートメントを使用する方法

NULLされていない場合は?

ありがとうございます!

+0

フム、あなたは '書き込むことはできません... AND((ワイン.apogeeはNULLです)OR(%d

+0

はい、私はそれを書くことができますが、これは私の問題を解決しません。以下のCLソリューションが機能します。 –

答えて

4

CASEは、比較によって返されるブール値であっても、任意の値を計算できます。 SQLiteので 、1は "真" と同じです:

... 
AND %d >= (wines.year + wines.maturity) 
AND CASE WHEN wines.apogee IS NOT NULL 
     THEN %d < (wines.year + wines.apogee) 
     ELSE 1 
    END 
... 

同じことがifnull() functionで行うことができます。

... 
AND %d >= (wines.year + wines.maturity) 
AND ifnull(%d < (wines.year + wines.apogee), 1) 
... 
+0

ありがとうCL。 2つのソリューションは私のために働くようです! –