2013-07-24 2 views
1

У меня есть стол с колонкой TimeStamp. Я хочу выполнить запрос в этой таблице, давая условие, которое проверяет только дату в этом столбце не время. Как я могу это сделать в HQL?Запрос HQL по дате в столбце TimeStamp?

Скажите, что моя колонка имеет значение 07/23/2013 04:40:59 PM, и я хочу выбрать запрос, чтобы проверить только на 7/23/2013 и игнорировать время.

ответ

0

В MySQL HQL может быть что-то вроде:

where DATE_FORMAT(date_column,'MM/dd/yyyy') = :date 

где дата «7/23/2013»

2

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

т.е.

table.timestamp >= 07/23/2013 AND table.timestamp < 07/24/2013 

или

from Table where to_char(TimeStamp,'YYYY/MM/DD') = '2013/07/23' 
+0

Может ли кто-нибудь объяснить, почему мой ответ был downvoted? –

+0

Потому что первое решение жестко запрограммировано. Неплохо рассчитать следующую дату (24 июля), а затем передать ее в sql-запрос. 2-е решение лучше, поэтому я нажал кнопку upvote. – Alex

0

Другой подход заключается в использовании DAY(...), MONTH(...), YEAR(...)expressions

WHERE MONTH (timestampcol) = 7 
    AND DAY (timestampcol) = 23 
    AND YEAR (timestampcol) = 2013 

В Postgres это отображается в extract(field from timestamp) функции

0

Wilts C. из таблицы, где to_char(TimeStamp,'YYYY/MM/DD') = '2013/07/23' - правильный ответ. Другие ответы не относятся к HQL или не относятся к форматированию ввода даты для сравнения в HQL.

У меня недостаточно репутации, чтобы проголосовать. HQL возьмет ввод строки даты (остерегайтесь SQL-инъекции) и сравните ее со строковым форматом столбца. Другой пример: to_char(surveyDate,'YYYY/MM/DD') between '2000/09/23' and '2015/07/23'

Смежные вопросы