1
5
返回
当该列为
对于任何其他值,表达式返回true或false。如果返回以下值,您将很容易看到:
发生的事情是
相比之下
两人的行为都是一样的
|
2
0
我不知道postgres的情况,但如果您计划在应用程序中支持空字符串,oracle有一些需要注意的问题: 1.在Oracle中,空字符串始终被视为NULL:如果插入空字符串,将读回NULL。在oracle中,空字符串根本不存在:如果在处理varchar值时可以写“”而不是NULL,那么它只是一个“语言语法糖”。 2.在甲骨文中 “”为空 将评估为真。空字符串实际上是空的 3.在oracle中,任何涉及空值的比较都将计算为FALSE。这意味着可以应用于NULL值并返回TRUE的运算符只有“is NULL”和“is not NULL” 上述操作的结果是,在oracle中,无论myvar的实际值是多少,以下所有表达式的计算结果都将为FALSE:
即使这些评估也总是错误的
因此,以下更新不会更新任何内容: 更新mytab set myfield='X',其中myfield='X' 正如我所说,您只能使用'is null'和'is not null'运算符。 所以你必须把它写成 更新mytab set myfield='X',其中myfield为空。 另外,唯一一个将null视为不同可比值的oracle函数是Decode()。也许这是一个缺陷,但今天有太多的软件依赖于这种行为来修复它。
是case sql构造的旧实现。。。在这个函数中,oracle将NULL(也包括空字符串)视为可比较的值。因此,您可以将NULL用于,它将匹配NULL值(和空字符串)。这是唯一发生这种情况的情况。 如果你试图用标准的SQL用例构造来实现它,它是行不通的:oracle没有在那里复制这个bug。 附言:如果回复的格式看起来很奇怪,那就很抱歉了。我在用手机写东西。。。 |
tggtsed · PostgreSQL从平均值中排除值 1 年前 |
Dawid · 为什么我不能在子查询中使用表别名? 2 年前 |
CraZyCoDer · 在PostgreSQL中锁定潜在事务 2 年前 |
ranebec · 计数时如何返回0而不是null? 2 年前 |
Flo · 分组依据中的SQL大小写 2 年前 |