Oracle运营商<>不在varchar2中工作

时间:2016-10-28 15:02:44

标签: oracle

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

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

不工作的SQL

select * from TEST where Adress <> '';

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');

1 个答案:

答案 0 :(得分:5)

Oracle着名treats an empty string as null

您的行为与:

相同
select * from TEST where Adress <> null;

...以及与null is undefined进行比较的结果。

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

select * from TEST where Adress is not null;

Read more about Oracle's handling of nulls