SQLite,“SELECT 0 OR NULL”与“SELECT 1 OR NULL”,奇怪的结果

问题描述 投票:0回答:1

我在 SQLite 中遇到了一个非常奇怪的布尔表达式行为,或者任何实际发生的情况。

SELECT 1 OR NULL
-- Result: 1

SELECT 0 OR NULL
-- Result: NULL

它甚至解释字符串并执行同样奇怪的评估:

SELECT '789abc' OR NULL
-- Result: 1

SELECT '000abc' OR NULL
-- Result: NULL

表达式的顺序并不重要,如果您添加更多相似的表达式和运算符,它的计算结果仍然相同。 有人可以解释一下这种奇怪的不对称背后的逻辑吗?幕后发生了什么?

sqlite
1个回答
0
投票

SQLite 使用类型强制,将非零数字和非空字符串解释为

true
,将零或空字符串解释为
false
。因此:

  • 1 OR NULL
    返回
    1
    ,因为
    1
    true
    true OR anything
    true
  • 0 OR NULL
    返回
    NULL
    ,因为
    0
    false
    ,并且
    false OR NULL
    未知 (
    NULL
    )。
  • '789abc' OR NULL
    返回
    1
    ,因为非空字符串是
    true
  • '000abc' OR NULL
    返回
    NULL
    ,因为该字符串虽然非空,但与布尔上下文中的
    0
    进行比较时,会隐式转换为数值(在本例中为
    NULL
    ,因为有前导零),结果在
    false OR NULL
    ,即
    NULL
© www.soinside.com 2019 - 2024. All rights reserved.