Lazer Asked: 2011-08-04 12:51:04 +0800 CST2011-08-04 12:51:04 +0800 CST 2011-08-04 12:51:04 +0800 CST 为什么 = NULL 在 Oracle 中不起作用? 772 我最近意识到我们需要使用一种特殊的语法IS NULL来将文字与 NULL 进行比较。 为什么= NULL在这里不起作用? oracle oracle-11g-r2 4 个回答 Voted Best Answer Nick Chammas 2011-08-04T13:13:31+08:002011-08-04T13:13:31+08:00 看看PSOUG 关于 NULL 的注释。正如 Fabricio Araujo 暗示的那样,NULL 并不是像数字 4 或字符串 'bacon strips' 这样的值。事实上,NULL 在 SQL 语言中是无类型的,这就是为什么你不能在相等比较中有效地使用它。您需要特殊IS [NOT] NULL语法来检查值是否为 NULL。 Fabricio Araujo 2011-08-04T12:59:00+08:002011-08-04T12:59:00+08:00 在 SQL Server 中,我们有一个连接设置可以=NULL与IS NULL. 但在最新版本中不再推荐 - 它甚至被标记为已弃用。 推荐的是 SQL 标准方式 -IS [NOT] NULL运算符。 (而且无论'NULL是一个值还是一个状态'我都不会在这里开战)......呵呵呵呵 BillThor 2011-08-04T14:54:58+08:002011-08-04T14:54:58+08:00 Oracle 将 NULL 视为未知值。问问自己这种平等是否有效。 (unknown amount in George's wallet) = (unknown amount in Harry's wallet) 或另有说明 NULL = NULL 答案显然是也许,这既不是真的也不是假的。 正如我所看到的那样,我将对 NULL 添加一些说明: 虽然 NULL 确实意味着“未设置”,但在这个问题的上下文中,我相信上述陈述是正确的。 列具有 NULL 值的原因有很多: 该列不适合该行的子类型或状态。(众所周知,我们不应该有一个值。在这种情况下,我们不应该将列的值与另一个值进行比较。测试 IS NULL 可能很有用。) 该值不可用或未记录在列中。(该值存在,但由于某种原因数据库不知道。在这些情况下,NULL 相当于数据库未知。) 在某些情况下,可能会以可能被认为不正确的方式处理 NULL,包括: NULL 值可以替换为默认值。未设置的 NOT NULL 数字可能具有值 0。(这并不一定意味着该值已知为 0。) 空字符串可以转换为 NULL,反之亦然。(该值可能已知为空。) Jack Douglas 2011-08-05T07:45:54+08:002011-08-05T07:45:54+08:00 我认为与其证明is null语法合理,不如指出在处理nulls 和用于处理它们的语法时没有好的通用经验法则。例如: 更新值使用类似的语法,set val = null而不是可能更好地set val to null反映语法的类似语法is null 在处理时null说:“nulls 在这里表现得像某某,所以它们应该像这里那样表现出来,这几乎总是一个错误 从 postgres 的角度来看,这是一篇关于该主题的优秀文章。简要总结一下,根据上下文对空值进行不同的处理,不要错误地对它们做出任何假设。
看看PSOUG 关于 NULL 的注释。正如 Fabricio Araujo 暗示的那样,NULL 并不是像数字 4 或字符串 'bacon strips' 这样的值。事实上,NULL 在 SQL 语言中是无类型的,这就是为什么你不能在相等比较中有效地使用它。您需要特殊
IS [NOT] NULL
语法来检查值是否为 NULL。在 SQL Server 中,我们有一个连接设置可以
=NULL
与IS NULL
. 但在最新版本中不再推荐 - 它甚至被标记为已弃用。推荐的是 SQL 标准方式 -
IS [NOT] NULL
运算符。(而且无论'NULL是一个值还是一个状态'我都不会在这里开战)......呵呵呵呵
Oracle 将 NULL 视为未知值。问问自己这种平等是否有效。
或另有说明
答案显然是也许,这既不是真的也不是假的。
正如我所看到的那样,我将对 NULL 添加一些说明:
虽然 NULL 确实意味着“未设置”,但在这个问题的上下文中,我相信上述陈述是正确的。
列具有 NULL 值的原因有很多:
在某些情况下,可能会以可能被认为不正确的方式处理 NULL,包括:
我认为与其证明
is null
语法合理,不如指出在处理null
s 和用于处理它们的语法时没有好的通用经验法则。例如:set val = null
而不是可能更好地set val to null
反映语法的类似语法is null
null
说:“nulls 在这里表现得像某某,所以它们应该像这里那样表现出来,这几乎总是一个错误从 postgres 的角度来看,这是一篇关于该主题的优秀文章。简要总结一下,根据上下文对空值进行不同的处理,不要错误地对它们做出任何假设。