Как я могу проверить на NULL и не NULL одновременно в SQL? - PullRequest
0 голосов
/ 16 декабря 2011

У меня есть этот sql:

select * from employees
where
lastname like '%smith%' and firstname like '%bob%' and middle like '%%'

Проблема в том, что значения имени, особенно отчества, могут быть нулевыми.Таким образом, приведенное выше утверждение найдет:

  smith, bob mike

, но не найдет

  smith, bob

, потому что отчество Боба равно нулю (у него нет отчества.)

Iесть это, которое работает, но я думал, что есть лучший способ и хотел ввода:

    select * from employees
    where
    lastname like '%smith%' 
    and firstname like '%bob%' 
    and (middle like '%%' or middle is null)

edit:

middle не всегда пусто.Иногда оно будет иметь значение, поэтому я должен сохранить тест для второго имени. Он может быть заполнен или иметь нулевое значение.

Спасибо.Я использую Oracle 11g, если это имеет значение.

Ответы [ 3 ]

5 голосов
/ 16 декабря 2011

Но

middle like '%%' or middle is null

всегда имеет значение true: либо middle имеет значение NULL, в этом случае middle is null имеет значение true, либо содержит один или несколько символов, в этом случае middle like '%%' имеет значение true.Так что вы можете просто написать:

select * from employees
where
lastname like '%smith%' and firstname like '%bob%'
1 голос
/ 16 декабря 2011

Вы можете использовать nvl:

select * from employees
where
lastname like '%smith%' and firstname like '%bob%' and nvl(middle,'') like '%%'

Но это все равно, что вообще не проверять отчество, так как '%%' будет совпадать с чем угодно, кроме нуля.

0 голосов
/ 16 декабря 2011

Может быть, вы можете просто удалить "среднее" ограничение из запроса?
Похоже, вы не особо задумываетесь о его значении, так почему бы просто:

select * from employees
where
lastname like '%smith%' and firstname like '%bob%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...