2013-04-17 7 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 Неравномерный оператор относительно дат

У меня есть 4 записи (которые необходимо исключить) с двумя датами, и мой запрос не работает. Почему это? Я делаю что-то очень глупое?

+5

вы имели в виду, 'AND'? Вы хотите вернуть все даты, которые не равны @ p29 И не равны @ p30? –

+0

Да, я так полагаю – chugh97

+2

Вы используете логический ИЛИ (C# ||) в своем запросе Linq. Вам нужно использовать логическое И (C# &&). – ClearLogic

ответ

2

Рассмотрим это утверждение

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

Если [DateOfLastTransaction] не является пустым
Или @ p29 = @ p29 = [DateOfLastTransaction]
Он всегда будет возвращать истинное

Если дата не соответствует ни
true или true: true

Если совпадение соответствует @ p29
ложного или истинное принимает значение истинного

Если дата спички @ P30
истинного или ложного принимает значения истинного

3

Я считаю, что вы хотели использовать логический оператор AND. например

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

Все вернется с оператором OR как [DateOfLastTransaction] может претендовать на первое логическое сравнение, но быть признаны недействительными на втором.

Смежные вопросы