2015-12-28 3 views
0

Когда столбец числовой типа я обычно использую эту проверку параметров в моих именованных запросах:Проверки нулевой параметр в NamedQuery

(-1 = ?1 OR column = ?1) 

Но с датой фильтром, используя между Я не могу сделать тот же тип проверки:

(p.date between ?1 and ?2) 

решение, которое я нашел, чтобы добавить новый параметр проверки, является ли нулевая дата:

(dateInitial == null || dateFinal == null) 

В именованного запроса:

(?3 = true OR p.date between ?1 and ?2) 
  • Есть ли решение, что мне не нужно, чтобы добавить еще один параметр? Использование существующих параметров.
+0

Не могли бы вы проверить даты перед вызовом именованный запрос? –

+0

Да, и я сделал это: '(dateInitial == null || dateFinal == null)'. Вы говорите о том, чтобы отправить другое значение в случае null? – Laerte

+0

Не ответ на ваш вопрос, я просто говорю, проверяю даты в коде, и если null не вызывает именованный запрос. У вас есть нулевые даты в базе данных? –

ответ

1

Вместо

(p.date between ?1 and ?2) 

Вы можете попробовать

(p.date < ?1 or ?1 is null) and (p.date > ?2 or ?2 is null) 
+0

Спасибо, я пробовал? 1 тоже null, но драйвер jdbc дает мне исключение ORA-00932 (непоследовательные типы данных). Порядок операторов - '>? 1' и' Laerte

+0

вы можете попробовать? 1? 2? 3? 4, проходящие для? 1 и? 2 одинаковое значение – StanislavL

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