【问题标题】:SQLite if statement in WHERE clauseWHERE 子句中的 SQLite if 语句
【发布时间】:2016-09-18 05:40:03
【问题描述】:

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

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

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

其实我只是想要那个:

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

=> 如果 wines.apogee 为空

也可以:

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

=> 如果 wines.apogee 不为空

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

谢谢!

【问题讨论】:

  • 嗯,SQLite不能写... AND ((wines.apogee is NULL) OR (%d &lt; wines.year + wines.apogee))
  • 是的,我可以写,但这并不能解决我的问题。下面的 CL 解决方案有效。

标签: sqlite case where-clause


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多