Проблема с <> при сравнении нулевых значений в SQL Server 2005 - PullRequest
0 голосов
/ 05 мая 2011

У меня есть четыре имени столбца, Level1, Level2, Level3 и по умолчанию нулевые значения, я хочу получить все строки, которые не заполнены Level1, Level 2, Level 3.

Это мой запрос, но он не получает никаких значений. Пожалуйста, помогите мне

select name from table
where Level1 <>'Completed' and Level2 <> 'Completed and Level3 <> 'Completed'

или

select name from table
where Level1 <>'Completed' or Level2 <> 'Completed or Level3 <> 'Completed' .

Но это не выборка каких-либо строк. Есть ли проблема с оператором <> или значениями NULL?

Ответы [ 3 ]

3 голосов
/ 05 мая 2011

Для значений NULL следует использовать value is not null или value is null

1 голос
/ 05 мая 2011

Так как вам нужно обрабатывать NULL «ненулевые значения» отдельно, попробуйте что-то вроде этого:

SELECT name 
FROM dbo.table
WHERE ISNULL(Level1, 'null') <> 'Completed' 
  AND ISNULL(Level2, 'null') <> 'Completed'
  AND ISNULL(Level3, 'null') <> 'Completed'

Если один из столбцов равен NULL, то этот NULL будет замененс любым значением, которое вы передаете в качестве второго arugment для ISNULL() - и поскольку я заменяю NULL на строку 'null' - оно не равно 'Completed' и будет выбрано.

0 голосов
/ 05 мая 2011

Столбец с NULL означает, что значение столбца неизвестно или недоступно. NULL не равен 0 или нулевой длине строки.

Чтобы отфильтровать строки на основе значения NULL, вы должны использовать IS NULL или IS NOT NULL

Чтобы найти строки, в которых любой из ваших столбцов равен NULL, вы можете использовать следующий запрос:

Select *
From YourTable
Where Level1 Is Null Or Level2 Is Null Or Level3 Is Null

См. Эту статью MSDN для полного объяснения NULL-сравнений в MS SQL Server

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