Невозможно запросить условие даты в определенном диапазоне

Я хочу получить запись из базы данных HSQL и запрос, как показано ниже:

ao.find(Issueda.class, Query.select().where("user=? AND TO_DATE(START_TIME, 'yyyy/MM/dd')>=     TO_DATE(?,'yyyy/MM/dd') AND TO_DATE(END_TIME, 'yyyy/MM/dd') <= TO_DATE(?,'yyyy/MM/dd')",user,parsedDate,parsedDate))

Теперь, это дает мне ошибку, что "To_DATE" не является допустимым ключевым словом, как показано ниже:

at java.lang.Thread.run(Thread.java:662)
 Caused by: java.sql.SQLException: Unexpected token: TO_DATE in statement [SELECT * FROM    
PUBLIC.AO_0371A8_ISSUE_da WHERE user=? AND TO_DATE(START_TIME, 'yyyy/MM/dd')>= TO_DATE(?,'yyyy/MM/dd') AND    TO_DATE(END_TIME, 'yyyy/MM/dd') <= TO_DATE(?,'yyyy/MM/dd')]

Если я удаляю "To_date", то я не получаю правильные данные результата из данных и возвращаю нулевое значение, только если данные существуют в базе данных. Формат значения поля даты в базе данных: "2013-05-15 00:00:00.000000000"

Может ли какой-нибудь один PLZ поделиться мне какой-либо альтернативы для запроса к базе данных?

1 ответ

Решение

Вам не нужно TO_DATE для этого запроса. TO_DATE предназначен для преобразования дат в формате String.

Судя по вашим комментариям, вы хотите, чтобы один параметр был между двумя датами или за пределами этих двух дат.

Правильный SQL для этого типа запроса выглядит так:

Возвращает даты между началом и концом включительно:

WHERE USER=? AND ? BETWEEN CAST(START_TIME AS DATE) AND CAST(END_TIME AS DATE)

Это возвращает даты вне начала и конца:

WHERE USER=? AND ? NOT BETWEEN CAST(START_TIME AS DATE) AND CAST(END_TIME AS DATE)

Для вышеупомянутых запросов вы используете объект java.sql.Data с PreparedStatement.setDate(colIndex)

Теперь, если дата, которую вы хотите сравнить, является строкой в ​​таком формате, как "2013/05/20", тогда вам нужно TO_DATE(?,'yyyy/MM/dd') вместо параметра. Если дата является строкой в ​​стандартном формате, например "2013-05-20", вы можете использовать CAST(? AS DATE) вместо параметра.

Я предполагаю, что столбцы таблицы вашей базы данных START_TIME и END_TIME определены как тип TIMESTAMP, но он должен работать для типов VARCHAR(N) или CHAR (N).

Другие вопросы по тегам