WHERE子句中的SQLite if语句

ale*_*our 2 sqlite case where-clause

我知道我可以在SQLite查询中使用CASE语句,但是我不知道如何在WHERE子句中构建它。

实际上,我在很长的WHERE子句中有此内容(这只是问题所关注的部分):

AND (%d >= (wines.year + wines.maturity)) AND (%d < (wines.year + wines.apogee))
Run Code Online (Sandbox Code Playgroud)

实际上我只想要:

AND (%d >= (wines.year + wines.maturity))
Run Code Online (Sandbox Code Playgroud)

=>如果wines.apogee为NULL

或者:

AND (%d >= (wines.year + wines.maturity)) AND (%d < (wines.year + wines.apogee))
Run Code Online (Sandbox Code Playgroud)

=>如果wines.apogee不为空

在这种情况下,如何使用CASE语句测试wines.apogee是否为NULL并在这种情况下添加请求的第二部分?

谢谢 !

CL.*_*CL. 5

CASE可以计算任何值,甚至可以是比较返回的布尔值。在SQLite中,1与“ true”相同:

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

使用ifnull()函数可以完成相同的操作:

...
AND %d >= (wines.year + wines.maturity)
AND ifnull(%d < (wines.year + wines.apogee), 1)
...
Run Code Online (Sandbox Code Playgroud)