我试图编写一个只选择所有非空名称的查询。以下两个查询都不返回任何结果:
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
任何人都可以解释这里发生的事情吗?谢谢!
答案 0 :(得分:4)
任何人都可以解释这里发生的事情吗?谢谢!
来自Ask Tom存档。
ZERO length varchar被视为NULL。
''不被视为NULL。
''当分配给char(1)变成' ' (char类型是空白填充字符串)。
''当分配给varchar2(1)成为''这是一个零长度的字符串和一个零 Oracle中的长度字符串为NULL(不再是'')
答案 1 :(得分:4)
任何涉及NULL值的比较都将返回FALSE。