У меня нет большого опыта работы с Oracle, поэтому простите меня, если это очевидно:
У нас есть таблица сотрудников с полем 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 пробелов?
2 ответа
Это будет работать
select * from employee where TRIM(email_address) is null
Причина, по которой вышеперечисленное работает, а это нет
select * from employee where TRIM(email_address) = ''
Потому что Oracle рассматривает текст нулевой длины как нулевой.
Если вы хотите работать с пустыми ячейками, вы должны использовать NVL
, чтобы дать ему значение по умолчанию, чтобы уравнение могло делать то, что должно.
См. Здесь для получения дополнительной информации Почему Oracle 9i обрабатывает пустую строку как NULL?
Select * from employee where NVL(trim(email_address), '*') <> '*';
Похожие вопросы
Связанные вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.