Таблица имеет столбец метки времени. Демонстрационное значение в этом могло быть 30.03.2010 13:42:42. С В спящем режиме, я делаю запрос диапазона Restrictions.between ("имя столбца", fromDate, toDate).
Быть в спящем режиме отображение для этого столбца следующие.
<property name="orderTimestamp" column="order_timestamp" type="java.util.Date" />
Скажем, я хочу узнать все записи, которые имеют дату 30-го марта 2010 и 31-го марта 2010. Запрос диапазона на этом поле сделан следующим образом.
Date fromDate = new SimpleDateFormat("yyyy-MM-dd").parse("2010-03-30");
Date toDate = new SimpleDateFormat("yyyy-MM-dd").parse("2008-03-31");
Expression.between("orderTimestamp", fromDate, toDate);
Это не работает.
Запрос преобразовывается в соответствующие метки времени как "30.03.2010 0:00:00" и "31.03.2010 0:00:00". Так, все записи на 31-е марта 2010 проигнорированы.
Простое решение этой проблемы могло быть должно иметь дату окончания как "31.03.2010 23:59:59". Но, я хотел бы знать, существует ли способ соответствовать только части даты столбца метки времени.
Кроме того, Expression.between()
включительно обоих пределов? Документация не проливает света на это.
Возможно, вы сможете ПРИСОЕДИНЯТЬ временную метку к DATE. В HQL есть поддержка для этого.
, я хотел бы знать, есть ли способ сопоставить только часть даты в столбце временной метки.
Если вам не нужен TIMESTAMP, используйте DATE (а не следует ли использовать type = "date"
?).
Кроме того, включает ли Expression.between () оба предела?
Похоже, что поведение оператора SQL BETWEEN зависит от базы данных . В PosgresQL выражение BETWEEN:
x BETWEEN y AND z
семантически эквивалентно:
y <= x AND x <= z
т.е. включительно.
"2010-03-31 23:59:59." пограничное состояние потенциально опасно: если в системе была транзакция между 23:59:59 и 00:00:00, вы ее пропустите. Если у вас достаточно транзакций в день и достаточно продолжительный период, отчет может сломаться, и вы потратите часы, чтобы выяснить, почему.
PostgreSQL между
включает ограничения , поэтому было бы даже небезопасно устанавливать дату окончания на 2010-04-01 00:00:00. Для уверенности используйте lt () и gt ().