2015-11-25 2 views
0

У меня есть набор данных, где я хотел бы отфильтровывать строки, соответствующие определенному условию, однако это оказалось намного более сложным, чем я думал, что это будет делать.SQL Server - Получение противоположности предложения where

По сути я хочу сделать что-то вдоль линий WHERE (column1 NOT LIKE 'Z%' and column2 != '2') с тем, что запрос будет возвращать только строки, в которых конкретная строка не делает имеют значение, как в column1 «Z%» и не делает имеют значение «2» в столбце2.

Например:

Полный набор данных

column1 | column2 
----------------- 
ACAL | 2 
----------------- 
ZVBBU3 | 2 
----------------- 
FSKE2 | X 

данных установлено, что я хочу

column1 | column2 
----------------- 
ACAL | 2 
----------------- 
FSKE2 | X 

Однако это не делает этого. Поэтому я подумал, что может быть такой подход к программированию, как WHERE (!(column1 LIKE 'Z% and column2 = '2')), где ! будет возвращать противоположность указанным критериям, но это вызывает синтаксическую ошибку. Есть ли способ сделать то, что я хочу достичь?

+0

Может ли быть NULL-х? Если да, что вы хотите в этом случае? – jarlh

ответ

3

Вы, наверное, хотите:

WHERE NOT (column1 LIKE 'Z%' AND column2 = '2') 

Вы были на правильном пути, с отрицанием, но следует использовать NOT отрицать вместо !.

Обратите внимание, что

WHERE (COLUMN1 NOT LIKE 'Z%') OR (COLUMN2 != '2') 

должны работать, а также De Morgan's laws логики утверждает, что

Отрицание конъюнкции есть дизъюнкция отрицаний.
отрицание дизъюнкции - это конъюнкция отрицаний.

+1

Ах, старый добрый оператор 'НЕ'. Спасибо, что указали мне в правильном направлении, а также полезную ссылку на упомянутые законы. – RoyalSwish

1

Это, вероятно, что вы пытаетесь написать:

WHERE NOT(column1 LIKE 'Z%' AND column2 = '2') 

С T-SQL в SQL Server, хотя это работает, вы должны использовать:

  • НЕ => !
  • <> =>! =
  • = => ==
Смежные вопросы