Select * from Example
where
1 = Case when :index = 0 then
Case when DateEx Between :pDat1 and :pDate2 then 1 end
else
Case When :index = 1 or :index = 2 then
Case When DateEx >= :pDat1 then 1 end
end
end
ИВ чем разница между этими условиями SQL?
Select * from Example
where
1 = Case when :index = 0 then
Case when DateEx Between :pDat1 and :pDat2 then 1 end
else 1
end
and 1 = Case When :index = 1 or :index = 2 then
Case When DateEx >= :pDat1 then 1 end
end
Я удалил свой ответ, так как неправильно истолковал утверждения дела. Первый из них более ясен в своем намерении. И, что очень важно, первый работает только с «между» случаем. В этом случае второй не работает. –
Вы действительно не должны использовать 'BETWEEN' (почти всегда, но особенно с датами). Существуют трудности/странные угловые случаи, особенно если вы когда-либо занимались отметками времени. Гораздо лучше использовать «нижнюю границу включительно, верхнюю границу эксклюзивного» менталитета (то есть «DateEx> =: pDat1 AND DateEx
X-Zero, я действительно не согласен с вашим обещанием никогда не использовать «между». Это прекрасно, если вы понимаете, как это работает. Кроме того, нет проблем с типом DATE. TIMESTAMP может быть «сложным» в любых условностях. – WarmBooter