не имеет большой опыт работы с Oracle, так что простите меня, если это очевидно:Странной Oracle результат запроса
У нас есть таблица Employee с EMPLOYEE_ADDRESS полеИменованного определяются как CHAR (60 BYTE)
Мы хотим, чтобы простой, где можно найти кого-либо, не имеющего ничего в своем поле адреса электронной почты.
Следующие два запроса не возвращают результаты:
Select * from employee where email_address is null; -- fails because the records aren't null, they're empty;
select * from employee where email_address = '';
Так я думал, что, может быть, проблема в том, что, из-за определения поля, мне нужно 60 пробелов, поэтому я попытался это и возвращаемые ожидаемый Результаты:
select * from employee where email_address = ' ';
Это работает, но кажется немым, и я не хочу вставлять это в производственный код. Так что я пошел, чтобы попытаться обрезать результаты что-то вроде одного из трех следующих запросов:
select * from employee where TRIM(email_address) = '';
select * from employee where RTRIM(email_address) = '';
select * from employee where LTRIM(email_address) = '';
Ни один из них не работал, так что чувство разочарования и просто того, чтобы знать, если он будет работать, я устал, чтобы это увидеть, если обрезка не имела никакого эффекта:
select * from employee where ltrim(email_address) || 'a' = 'a';
Это сработало. (Реакция .. ват?)
Так что мне сначала интересно, почему использование различных функций отделки не сработало, а во-вторых, как я могу построить запрос так, чтобы он буквально не искал 60 пробелов ?
насчет этого 'выберите * от сотрудника, где TRIM (email_address) является null' – alkis
Это работает. Спасибо. Любая официальная причина, почему это сработает? Я действительно знаком с SQL-сервером, поэтому я все еще изучаю различия в том, как ведет себя Oracle. – David
См. Мой ответ. Oracle обрабатывает текст нулевой длины как null. Он не будет различать их. – alkis