我有一个数据集,我希望过滤出符合特定条件的行,但事实证明它比我想象的要复杂得多。
基本上我想按照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'))
的编程方法,其中!
将返回与指定条件相反的方法,但这会引发语法错误。有没有办法做我想做的事情?
答案 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,虽然它有效,但您应该使用: