SQLite if 语句在 WHERE 子句中

SQLite if statement in WHERE clause

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

实际上我在一个很长的WHERE子句中有这个(这只是问题涉及的部分):

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

事实上我想要的就是这个:

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

=> 如果 wines.apogee 为 NULL

或者还有:

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

=> 如果 wines.apogee 不为空

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

谢谢!

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
...

同样可以用 ifnull() function:

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