Задача - найти известное значение в указанном поле.Условие: есть системная дата или дата, которую я хочу использовать.Эта дата должна быть между 2 датами (полями, в которых даты известны), то есть вам необходимо проверить все даты в базе данных, + дополнительное условие:
необходимо, чтобы найденная строка имелаСамо по себе ранее известное поле, помеченное IS NULL
Код, написанный на Sql, ниже работает.
select b.* from nc_proc b where b.code_proc = 'S.2.2' and b.date_on >= '12-AUG-19' and b.d_off IS NULL and b.date_off > '12-AUG-19';
'12 -AUG-19 '- это переменная, которая отправляется мне (точнееЯ формирую это из системного времени)
'S.2. 2 '- это переменная, которую я получаю и которая является основным поиском.
Как сделать запрос?
вот пример, который пытался сделать
@Query(value = "SELECT b.* FROM nc_proc b WHERE b.code_proc = ?1 and b.date_on > ?2 and b.d_off IS NULL and b.date_off > ?2 ", nativeQuery = true)
List <NcProc> findByCodeProcList2 (String value, String systemDate);
Это не работает.
Пожалуйста, скажите мне, как это исправить.И возможно ли не использовать запрос вручную, а делать со встроенными ключевыми словами пружинные данные?Тогда этот вариант будет лучше.
Обновление
@Query(value = "SELECT b.* FROM nc_proc b WHERE b.code_proc = ?1 and ?2 b.date_on BETWEEN b.date_off and b.d_off IS NULL", nativeQuery = true)
List <NcProc> findByCodeProcList2 (String value, String systemDate);
Hibernate: ВЫБРАТЬ b. * ОТ nc_proc b ГДЕ b.code_proc =?а также ?b.date_on МЕЖДУ b.date_off и b.d_off IS NULL 11: 02: 58: 871 ПРЕДУПРЕЖДЕНИЕ http-nio-8080-exec-1 ohejsSqlExceptionHelper: 137 - Ошибка SQL: 920, SQLState: 42000 19-сентября-20 11:02: 58: 871 ОШИБКА http-nio-8080-exec-1 ohejsSqlExceptionHelper: 142 - ORA-00920: недопустимый реляционный оператор
Кроме того, мне сказали, что МЕЖДУ включаетлевое и правое ограничение, и необходимо, чтобы требуемая дата была в указанном интервале и не равнялась левому и правому ограничению.
Обновление
это работа
@Query(value = "select * from nc_proc where code_proc = ?1 " +
"and date_on <= TO_DATE(?2, 'yyyy-mm-dd HH24:MI:SS') " +
"and TO_DATE(?2, 'yyyy-mm-dd HH24:MI:SS ') < date_off " +
"and d_off IS NULL",
nativeQuery = true)
NcProc findByCodeProc(String codeProc, String systemDate);
Я хотел не использовать нативную запись в будущем.
Кто знает, как составить выражение из ключевых слов spring-data?