选择不等于oracle中空字符串的字段

时间:2014-06-06 16:40:14

标签: oracle

我试图编写一个只选择所有非空名称的查询。以下两个查询都不返回任何结果:

 SELECT name FROM MyTable WHERE name != '';

 SELECT name FROM MyTable WHERE name = '';

对于上下文,这两个查询都会返回结果:

 SELECT name FROM MyTable WHERE name != 'a';

 SELECT name FROM MyTable WHERE name IS NOT NULL;

我在某处看到空字符串在oracle中相当于NULL,但我仍然不明白为什么这解释了这种行为。我需要支持SQL Server和Oracle,这就是为什么我不能依赖WHERE name IS NOT NULL

任何人都可以解释这里发生的事情吗?谢谢!

2 个答案:

答案 0 :(得分:4)

  

任何人都可以解释这里发生的事情吗?谢谢!

来自Ask Tom存档。

ZERO length varchar被视为NULL。

''不被视为NULL。

''当分配给char(1)变成' ' (char类型是空白填充字符串)。

''当分配给varchar2(1)成为''这是一个零长度的字符串和一个零 Oracle中的长度字符串为NULL(不再是'')

答案 1 :(得分:4)

任何涉及NULL值的比较都将返回FALSE。