为什么这个SQL语句不起作用?

时间:2008-10-27 15:54:30

标签: sql oracle

我有以下SQL语句:

SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%';

它在Postgres上运行正常(从日志中返回所有不同的名称,它们不是空的并且包含字符串'.EDIT')。但在甲骨文这个声明不起作用。知道为什么吗?

3 个答案:

答案 0 :(得分:16)

SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%';

1)Oracle将''视为NULL,这意味着比较“NOT name =''”永远不会为true或false;改为使用“IS NOT NULL”。但...

2)第二个条件“name LIKE'%。EDIT%'无论如何都不匹配空字符串,使第一个条件变得多余。

重写为:

SELECT DISTINCT name FROM log WHERE name LIKE '%.EDIT%';

答案 1 :(得分:3)

Oracle中的空字符串等效于NULL,导致比较失败。 将查询的该部分更改为NAME IS NOT NULL

答案 2 :(得分:2)

您可以在不使用“NOT NAME =''”子句的情况下重写该查询。

 SELECT DISTINCT name 
 FROM log
 WHERE name LIKE '%.EDIT%';

这对你有用吗?

如果没有,它以什么方式不起作用?它会导致错误吗?是否返回了错误的结果?

请使用以下信息扩展您的问题: - )