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)
...
我知道我可以在 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)
...