【问题标题】:SQLite doesn't treat || like OR [closed]SQLite 不处理 ||像或 [关闭]
【发布时间】:2013-06-24 17:40:41
【问题描述】:

我以后代的名义自我回答。问题是为什么这个 SQLite 查询没有达到我的预期:

SELECT is_current FROM sp_table WHERE is_current != 1 || is_current IS NULL;

它只选择 is_current 为 NULL 的行!呸。

【问题讨论】:

  • 您能否至少给您的问题起一个好标题,以便其他人可以找到它?
  • 此外,|| 不仅在 sqlite 中没有做你认为的那样......

标签: sqlite operators operator-precedence or-operator


【解决方案1】:

问题在于 SQLite 中的 ||运算符不是逻辑或!这是一个字符串连接运算符。

OR 是正确的运算符。

另外,||比 SQLite 中的所有其他运算符具有更高的优先级,因此我的表达式甚至没有按照我想的顺序进行评估。

正确的表达方式是:

SELECT is_current FROM sp_table WHERE is_current != 1 OR is_current IS NULL;

最后,值得注意的是,您不能将该表达式替换为:SELECT is_current FROM sp_table WHERE is_current != 1,因为在 SQLite 中,NULL != 1 的计算结果为 false。您必须明确检查是is_current IS NULL

SQLite reference

【讨论】:

猜你喜欢
  • 2013-01-13
  • 2011-11-21
  • 1970-01-01
  • 2018-04-09
  • 2012-03-08
  • 1970-01-01
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多