Я написал ниже запрос, чтобы получить записи:
Select *
from Scf_Invoice i
where cast(i.inv_Acceptance_Date as date) = TO_DATE('2018-12-18', 'YYYY-MM-DD');
Но я не получаю результата, даже если есть 2 записи для данной даты. Я думаю, это тоже время учитывает. Когда я делаю
Select *
from Scf_Invoice i
where cast(i.inv_Acceptance_Date as date) > TO_DATE('2018-12-18', 'YYYY-MM-DD');
Я получаю результаты, но хочу, чтобы они были с параметром '='. Что мне следует изменить в моем запросе?
Используйте усечение, чтобы получить день
trunc(i.inv_Acceptance_Date) =
The TRUNC (date) function returns date with the time portion of the day truncated to the unit specified by the format model fmt. The value returned is always of datatype DATE, even if you specify a different datetime datatype for date. If you omit fmt, then date is truncated to the nearest day.
Select *
from Scf_Invoice i
where trunc(i.inv_Acceptance_Date) = TO_DATE('2018-12-18', 'YYYY-MM-DD');
@JavaProgrammer показывает ошибку и то, как вы ее выполняете в коде, вы можете пропустить пробел или опечатку
@JavaProgrammer что такое Select i
? Вы имеете ввиду i.columnName
?
ScfInvoiceRepository invoiceRepository; String invoiceQuery = "Выберите i из ScfInvoice i, где trunc (i.invAcceptanceDate) = TO_DATE ('" + currentBusinessDate + "', 'ГГГГ-ММ-ДД')"; Список <ScfInvoice> invoiceList = invoiceRepository.executeQuery (invoiceQuery); Это мой код. Я написал собственный запрос для своего класса сущности (ScfInvoice), и currentBusinessDate - это сегодняшняя дата.
@JavaProgrammer вы не изменили приведение к усечению в коде
Проблема решена. Проблема заключалась в использовании функций SQL в запросе JPQL. Я изменил свой запрос на «Выбрать i из ScfInvoice i, где func ('TRUNC', i.invAcceptanceDate) = func ('to_date', '2018-12-18', 'YYYY-MM-DD')». Теперь все работает нормально. Большое спасибо. Вы очень помогли.
Select *
from Scf_Invoice i
where trunc(i.inv_Acceptance_Date) = TO_DATE('2018-12-18', 'YYYY-MM-DD');
или
Select *
from Scf_Invoice i
where trunc(i.inv_Acceptance_Date) = trunc(sysdate);
для получения данных, равных текущей дате
Большое спасибо. Проблема решена на 50%. Теперь он дает мне правильный результат в SQLDeveloper. Но когда я пытаюсь запустить его из приложения Spring Boot Application, возникает ошибка. Вызвано: org.eclipse.persistence.exceptions.JPQLException: Описание исключения: синтаксический анализ ошибки [Выберите i из ScfInvoice i, где trunc (i.invAcceptanceDate) = to_date ('2018-12-18', 'YYYY-MM-DD' )]. [33, 99] Выражение не является допустимым условным выражением.