在多少种语言中," Null"不等于" Null"就等于什么?
时间:2020-03-05 18:56:44 来源:igfitidea点击:
Null在多少种语言中不等于Null?
解决方案
回答
甲骨文就是这样。
SELECT * FROM dual WHERE NULL=null; --no rows returned
回答
在SQL中(作为逻辑语言)是这种方式,因为null表示未知/未定义。
但是,在编程语言(例如C ++或者C#)中,空指针/引用是具有特定含义的特定值-没什么。
两个虚无是等价的,但是两个未知是不对的。混淆来自于两个概念使用相同名称(空)的事实。
回答
MySQL有一个空安全的相等运算符<=>,如果双方相等或者双方为null,则返回true。参见MySQL文档。
回答
我们可以通过以下方式使红宝石工作:
class Null def self.==(other);false;end end n=Null print "Null equals nothing" if n!=Null
回答
在VB6中,表达式" Null = Null"将产生" Null",而不是我们所期望的" True"。
如果我们尝试将其分配给布尔值,则会导致运行时错误,但是如果我们使用它,则会导致运行时错误
作为"如果...则"的条件,它将像"假"一样起作用。而且
Null <> Null也将 产生
Null`,所以:
在VB6中,我们可以说" Null"既不等于自身(或者其他任何东西)也不不相等!
我们应该使用IsNull()函数对其进行测试。
VB6还具有其他特殊值:
- 对象引用什么都没有。
Nothing = Nothing
是编译错误。 (我们应该使用"is
"进行比较) - 缺少可选参数的
Missing
。它没有文字表示,因此我们甚至无法编写" Missing = Missing"。 (测试是IsMissing(foo)
) - 空的代表未初始化的变量。尽管也有一个函数" IsEmpty()",但它的确与自己相等。
- ...让我知道我是否忘记了一个
我记得对VB有点厌恶。
回答
在C#中,Nullable <bool>具有关于逻辑运算符的有趣属性,但是相等运算符与该语言中的其他类型相同(即(((bool?)null ==(bool?)null)== true) 。
为了保留短路逻辑运算符的短路行为,并保持与非短路逻辑运算符的一致性,可为空的布尔值具有一些有趣的属性。例如:true || null == true。 false && null == false等。这与其他三值逻辑语言(例如ANSI SQL)直接矛盾。
回答
在SQL中,我们必须执行以下操作:
WHERE column is NULL
而不是
WHERE column = NULL