Date Compare в HQL без временной отметки
Мне нужно сравнить две даты в запросе hibernate hql.
Я использую java.util.Date в java bean и использую timestamp как тип данных в базе данных mysql.
select t from Task t where t.modifiedDate > t.endDate;
Вышеуказанный запрос сравнивает время с датой. Что мне делать, чтобы сравнивать дату в предыдущем запросе без времени.
Ответы
Ответ 1
См. документацию Hibernate для доступных функций даты
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html
В разделе 14.10 обратите внимание на эту строку
second(...), minute(...), hour(...), day(...), month(...), and year(...)
Итак, это должно работать
... where year(t.endDate) > year(t.startDate)
and month(t.endDate) > month(t.startDate)
and day(t.endDate) > day(t.startDate)
Решение, отвечающее на вопрос,
... where DATE(t.endDate) > (t.startDate)
Ответ 2
Предлагаемое решение с функцией date()
, по-видимому, не является чистым SQL и не работает для меня (с использованием SQL Server). Первоначальное решение (сравнение дня, месяца и года в отдельности) является шагом в правильном направлении, но не может быть сделано таким образом, как, например, для даты, которая должна быть в будущем, день не должен быть больше, если месяц больше и т.д. Однако следующий SQL должен работать:
( year(t.endDate) > year(t.startDate) )
or
( year(t.endDate) = year(t.startDate)
and
month(t.endDate) > month(t.startDate) )
or
( year(t.endDate) = year(t.startDate)
and
month(t.endDate) = month(t.startDate)
and
day(t.endDate) > day(t.startDate) )