SQL Server - 与where子句相反

时间:2015-11-25 13:37:25

标签: sql sql-server-2005

我有一个数据集,我希望过滤出符合特定条件的行,但事实证明它比我想象的要复杂得多。

基本上我想按照WHERE (column1 NOT LIKE 'Z%' and column2 != '2')的方式做一些事情,认为查询只返回特定行的值为'Z%'的行'in column1和在第2列中具有值'2。

例如:

完整数据集

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

我想要的数据集

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

然而,它并没有这样做。所以我认为可能存在类似WHERE (!(column1 LIKE 'Z% and column2 = '2'))的编程方法,其中!将返回与指定条件相反的方法,但这会引发语法错误。有没有办法做我想做的事情?

2 个答案:

答案 0 :(得分:5)

你可能想要这个:

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

你在正确的轨道上有否定,但应该使用NOT否定而不是!

请注意

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

的逻辑状态,

应该与De Morgan's laws一样有效

  

结合的否定是否定的脱节。
的   否定分离是否定的结合。

答案 1 :(得分:2)

这可能是你想写的:

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

使用SQL Server中的T-SQL,虽然它有效,但您应该使用:

  • => !
  • <> => !=
  • = => ==