Oracle运算符<>不在varchar2中工作

Tie*_*ech 2 oracle

我创建了表TEST,用于<>数据库Oralce中的use运算符.当您运行以下命令时,我发现奇怪的是不返回任何记录.

为什么不退回任何记录?在SQL Server和Firebird数据库中,该命令有效.

SQL不工作

select * from TEST where Adress <> '';
Run Code Online (Sandbox Code Playgroud)

http://sqlfiddle.com/#!4/7e89f/2

create table TEST(
    ID int not null,
    Name varchar2(100) not null,
    Adress varchar2(100)  
);

alter table TEST add constraint TEST_pk primary key (ID);

insert into TEST values (1, 'Emily', null);
insert into TEST values (2, 'Michael', 'Test');
insert into TEST values (3, 'Daniel', 'Test');
insert into TEST values (4, 'Alexis', 'Test');
Run Code Online (Sandbox Code Playgroud)

Ale*_*ole 5

Oracle着名地将空字符串视为null.

你做的是:

select * from TEST where Adress <> null;
Run Code Online (Sandbox Code Playgroud)

...并且与null相比的任何结果都是未定义的.

您必须使用空比较运算符:

select * from TEST where Adress is not null;
Run Code Online (Sandbox Code Playgroud)

阅读有关Oracle处理空值的更多信息.