не добавляйте "и" в условии, где значение столбца равно нулю - PullRequest
0 голосов
/ 05 июня 2018

У меня есть запрос, в котором я не хочу добавлять «и» в условие условия, когда значение столбца равно нулю, например,

select * from x where x.abc = 'ACTIVE' and x.start_date < sysdate and x.end_date > sysdate

Так что в этом случае я хочу, чтобы x.end_date будет применяться толькоесли его значение не равно нулю. Нет хранимой процедуры, просто запрос.

Я также хочу преобразовать этот запрос в спецификации jpa-данных весны, используя построитель критериев и предикаты.

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Вы можете посмотреть на функцию NVL для этого.

select * from x
 where x.abc = 'ACTIVE' 
   and x.start_date < sysdate 
   and NVL(x.end_date,sysdate) >= sysdate
0 голосов
/ 05 июня 2018

Не то, чтобы другие ответы были неправильными или хорошими, но я написал бы это немного по-другому, и я публикую это здесь в надежде, что у кого-то есть интересный комментарий о том, почему один путь может быть лучше другого.

Вот что я написал бы:

select * from x
 where x.abc = 'ACTIVE' 
   and sysdate between x.start_date and nvl(x.end_date,sysdate);

Для меня это звучит так: «текущая дата должна попадать в активный диапазон дат записи».

0 голосов
/ 05 июня 2018

Вы можете использовать or:

select *
from x
where x.abc = 'ACTIVE' and
      x.start_date < sysdate and
      ( x.end_date > sysdate or x.end_date is null );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...