예
나는 테이블이있다
ID myField
------------
1 someValue
2 NULL
3 someOtherValue
TRUE, FALSE 또는 (SQL의 삼항 논리로 인해) UNKNOWN으로 평가할 수있는 T-SQL 부울 식
SELECT * FROM myTable WHERE myField = 'someValue'
-- yields record 1
다른 모든 레코드 를 얻으려면 간단히 표현을 부정 할 수 없습니다
SELECT * FROM myTable WHERE NOT (myField = 'someValue')
-- yields only record 3
왜 이런 일이 발생하는지 (삼항 논리) 알고 있으며이 특정 문제를 해결하는 방법을 알고 있습니다.
나는 단지 사용할 수 있고 알 myField = 'someValue' AND NOT myField IS NULL
수없는 "돌이킬 수없는"표현을 얻는다는 것을 안다 :
SELECT * FROM myTable WHERE NOT (myField = 'someValue' AND myField IS NOT NULL)
-- yields records 2 and 3, hooray!
일반적인 경우
이제 일반적인 경우에 대해 이야기합시다. myField = 'someValue'
많은 필드와 조건, 아마도 하위 쿼리를 포함하는 복잡한 표현이 있다고 가정 해 봅시다 .
SELECT * FROM myTable WHERE ...some complex Boolean expression...
이 expession을 "반전"하는 일반적인 방법이 있습니까? 하위 표현식에서 작동하는 경우 보너스 포인트 :
SELECT * FROM myTable
WHERE ...some expression which stays...
AND ...some expression which I might want to invert...
SQL Server 2008-2014를 지원해야하지만 2008보다 최신 버전이 필요한 우아한 솔루션이 있다면 그것에 대해서도 관심이 있습니다.