2014-09-05 2 views
10

Мне нужно сравнить две даты в запросе hibernate hql. Я использую java.util.Date в своем java bean и использую timestamp как тип данных в базе данных mysql.Дата Сравнить в HQL без отметки времени

select t from Task t where t.modifiedDate > t.endDate; 

Вышеуказанный запрос сравнивает время с датой. Что я должен делать, чтобы сравнивать дату в предыдущем запросе без времени.

ответ

13

Смотрите документацию 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) 
+0

Это дает мне сравнение с месяцем и годом отдельно ... но я должен сравнить ** полную дату ** в то время как * * 06-09-2014 ** –

+2

Он работает со следующим изменением **, где DATE (t.endDate)> (t.startDate) ** –

+0

Рад, что это сработало для вас. Я редактирую ответ с вашим решением, а не оставляю решение в комментариях. Это способ делать вещи с помощью Stackoverflow. – carbontax

0

Предлагаемое решение с функцией 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)) 
Смежные вопросы