2013-08-04 3 views
0

У меня есть StartDate10Столбцы в таблице, для которых они имеют значение NULL, я передам два параметра хранимой процедуре для фильтрации этой таблицы, параметры могут быть нулевыми значениями, а столбцы также являются как я уже упоминал.Отфильтровать столбец с нулевым значением для параметра с нулевым значением SQL

Как я могу написать SQL заявление, в данном случае с условным WHERE пунктом, чтобы получить даты больше или равно StartDate и даты меньше или равно EndDate?

Вот что я сделал до сих пор:

SELECT StartDate, EndDate FROM Table1 
WHERE  (StartDate >= Convert(DateTime, @dtFrom) OR StartDate IS NOT NULL) AND 
     (EndDate <= Convert(DateTime, @dtTo) OR EndDate IS NOT NULL) 
+2

это не ясно, что должно произойти, когда StartDate является недействительным и '@ dtfrom' нет и когда StartDate не утративший' @ ​​dtfrom' и когда StartDate и '@ dtfrom' является оба null. – xanatos

+1

I второй вопрос @xanatos. Нужно ли null parm искать только null? Означает ли это, чтобы выбрать любую дату? Или...? – asantaballa

+0

@xanatos Если 'StartDate' является нулевым, а' @ dtFrom' - нет, он должен фильтровать в соответствии с '@ dtFrom', если наоборот, он не должен фильтровать по параметру, оба значения null должны получить все. – SVI

ответ

1

Если нулевые параметры означают «не фильтровать по этому параметру» и нулевых значения в столбцах означают положительную/отрицательную бесконечность, это вопрос вы можете Применение:

select StartDate, EndDate 
from Table1 
where 
    (@dtFrom is null or StartDate is null or StartDate >= Convert(DateTime, @dtFrom)) and 
    (@dtTo is null or EndDate is null or EndDate <= Convert(DateTime, @dtTo)) 
Смежные вопросы