我有以下SQL语句:
SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%';
它在Postgres上运行正常(从日志中返回所有不同的名称,它们不是空的并且包含字符串'.EDIT')。但在甲骨文这个声明不起作用。知道为什么吗?
答案 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%';
这对你有用吗?
如果没有,它以什么方式不起作用?它会导致错误吗?是否返回了错误的结果?
请使用以下信息扩展您的问题: - )