在多少种语言中Null不等于甚至没有Null的东西?

时间:2008-09-16 18:10:56

标签: sql ruby oracle language-agnostic vb6

Null中有多少种语言不等于甚至没有Null?

7 个答案:

答案 0 :(得分:15)

这种方式在SQL中(作为逻辑语言),因为null意味着未知/未定义。

但是,在编程语言(例如,C ++或C#)中,空指针/引用是具有特定含义的特定值 - 没有。

两个不相同的东西,但两个未知数不是。混淆来自两个概念都使用相同的名称(null)。

答案 1 :(得分:4)

在VB6中,表达式Null = Null将产生Null而不是True,如您所料。 如果您尝试将其分配给布尔值,这将导致运行时错误,但是如果您使用它 作为“If ... Then”的条件,它将像False一样。此外,Null <> Null 产生Null,所以:

在VB6中,您可以说Null既不等于自身(或其他任何东西),也不等于!

您应该使用IsNull()函数进行测试。

VB6还有其他特殊值:

  • Nothing用于对象引用。 Nothing = Nothing是编译错误。 (你应该用“is”)
  • 来比较它
  • Missing表示尚未给出的可选参数。它没有文字表示,所以你甚至不能写Missing = Missing。 (测试是IsMissing(foo)
  • Empty表示未初始化的变量。尽管一个函数IsEmpty(),但这个测试的确等于自己。
  • ...如果我忘了一个
  • ,请告诉我

我记得有点厌恶VB。

答案 2 :(得分:3)

Oracle就是这样。

SELECT * FROM dual WHERE NULL=null;  --no rows returned

答案 3 :(得分:3)

MySQL有一个零安全等式运算符&lt; =&gt;,如果双方都相等或双方都为空,则返回true。请参阅MySQL Docs

答案 4 :(得分:2)

你可以用这种方式制作红宝石:

class Null
 def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null

答案 5 :(得分:2)

在C#中,Nullable&lt; bool&gt;有关逻辑运算符的有趣属性,但是相等运算符与该语言中的其他类型相同(即((bool?)null ==(bool?)null)== true)。

为了保留短路逻辑运算符的short-circuited行为,并保持与非短路逻辑运算符的一致性,可空布尔值具有一些有趣的属性。例如:true || null == true。虚假&amp;&amp; null == false等。这与其他三值逻辑语言(如ANSI SQL)直接矛盾。

答案 6 :(得分:0)

在SQL中,您必须执行以下操作:

WHERE column is NULL

而不是

WHERE column = NULL