WHERE (@StartDate IS NULL OR DATEDIFF(DAY,InsertDate,@StartDate) <= 0 )
AND (@EndDate IS NULL OR DATEDIFF(DAY,InsertDate,@EndDate) >= 1)
Игнорирует ваши параметры, когда они нулевые. Однако это все еще не обрабатывает нуль InsertDates
. DATEDIFF
вернет ноль для нуля InsertDates
.
Вам нужно добавить (InsertDate is null) OR
к остальной части вашего запроса, если вы хотите вернуть все нулевые InsertDates.
WHERE (InsertDate is null) OR ((@StartDate IS NULL OR DATEDIFF(DAY,InsertDate,@StartDate) <= 0 )
AND (@EndDate IS NULL OR DATEDIFF(DAY,InsertDate,@EndDate) >= 1))
Возможно, вы захотите заменить DATEDIFF
обычным синтаксисом сравнения дат для повышения производительности. InsertDate >= @StartDate
будет быстрее, особенно если InsertDate
имеет индекс. Я также считаю, что этот синтаксис делает более понятным, что вы ищете InsertDates
между этими датами параметров или используете встроенный синтаксис between
, который переводит его в синтаксис> = & <=. </p>
Перед добавлением SP SQL и ответом на вопросы:
Без лежащего в основе sql мы немного слепы, чтобы помочь вам, и нам также потребуется немного больше информации. Я задал пару вопросов (выше, в комментариях к вопросу), которые помогут нам лучше понять:
Что в стороне:
Я предполагаю, что вы делаете диапазон / между InsertDate
против @StartDate
и @EndDate
. Поскольку эти параметры передаются в датах, null никогда не будет найден, если вы используете нормальный диапазон / между синтаксисами, такими как InsertDate >= @StartDate
или InsertDate between @StartDate and @EndDate
, поскольку NULL никогда не будет равняться дате, только если @StartDate
или @EndDate
равно NULL.
Если вы хотите вернуть все null InsertDates
, вам нужно добавить к вашему запросу что-то вроде:
select field1,field2 from table1
where (InsertDate is null) or (InsertDate >= @StartDate and InsertDate <= @EndDate)
Если @StartDate
или @EndDate
равно нулю и вы хотите, чтобы это означало игнорировать параметр, тогда вам нужно переписать базовый SQL в хранимой процедуре, чтобы обработать не только InsertDate >= @StartDate
.
Это должно было бы выглядеть как (@StartDate is null or InsertDate >= @StartDate)
.
То же самое должно быть сделано для параметра @EndDate
.