Почему не работает этот оператор SQL? - PullRequest
5 голосов
/ 27 октября 2008

У меня есть следующий SQL-оператор:

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

Отлично работает на Postgres (возвращает все разные имена из журнала, которые не пусты и содержат строку '.EDIT'). Но на Oracle это утверждение не работает. Есть идеи почему?

Ответы [ 3 ]

16 голосов
/ 27 октября 2008
SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%';

1) Oracle обрабатывает '' как NULL, что означает, что сравнение "NOT name = ''" никогда не бывает истинным или ложным; используйте вместо этого "IS NOT NULL". Но ...

2) Второе условие "name LIKE '% .EDIT%' в любом случае не будет соответствовать пустой строке, что делает первое условие избыточным.

Переписать так:

SELECT DISTINCT name FROM log WHERE name LIKE '%.EDIT%';
3 голосов
/ 27 октября 2008

Пустая строка в Oracle эквивалентна NULL, что приводит к сбою сравнения. Измените эту часть запроса на NAME IS NOT NULL

2 голосов
/ 27 октября 2008

Вы можете переписать этот запрос без предложения "NOT NAME = ''".

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

Это работает для вас?

Если нет, то каким образом это не работает? Это вызывает ошибку? Вернулись ли неправильные результаты?

Пожалуйста, расширьте свой вопрос этой информацией: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...