2013-04-17 1 views
2
SELECT * FROM TABLE_NAME 
WHERE 
([DateOfLastTransaction] <> @p29) 
OR ([DateOfLastTransaction] <> @p30) 

@p29='2012-11-30 00:00:00.000', 3 records 
@p30='2012-04-17 00:00:00.000' 1 record 

SQL 프로파일 러에서 쿼리를 가져와 불필요한 비트를 제거했습니다. OR 및 @ p30 매개 변수를 삭제하면 3 개의 레코드가 반환됩니다. 그것을 영향을 미치는 "또는"인가?TSQL 날짜를 기준으로 연산자가 같지 않음

2 개의 날짜가있는 4 개의 레코드 (제외 할 필요가 있음)가 있는데 내 쿼리가 작동하지 않습니다. 왜 그런가요? 나는 바보 같은 짓을하고 있니?

+5

에 P30
참 또는 거짓 평가하여 @ 일치하는 경우? @ p29와 같지 않고 @ p30과 같지 않은 모든 날짜를 반환하고 싶습니까? –

+0

네, 그렇게 생각합니다 – chugh97

+2

Linq 쿼리에서 논리 OR (C# ||)를 사용하고 있습니다. 논리 AND (C# &&)를 사용해야합니다. – ClearLogic

답변

2

날짜도
일치하는 경우
또는 @의 P29은 = @의 P29는 = [DateOfLastTransaction]
그것은 항상 참

를 반환이 문

SELECT * FROM TABLE_NAME 
WHERE 
    [DateOfLastTransaction] <> @p29 
OR [DateOfLastTransaction] <> @p30 

을 고려 true 또는 true가 true로 평가됩니다.

날짜가 @ p29와 일치하면 사실

- 허위 또는 참으로 당신은`AND`을하셨습니까 날짜가 진정한

3

AND 논리적 연산자를 사용하는 것으로 알고 있습니다. 예 : [DateOfLastTransaction]가 제 1 논리 비교를받을 수 있지만, 두 번째에서 무효로

SELECT * 
FROM Table_Name 
WHERE 
    [DateOfLastTransaction] != @p29 
    AND [DateOfLastTransaction] != @p30 

모두는 OR 연산자를 반환한다. [DateOfLastTransaction]가 null이 아니라면