Запрос даты с В спящем режиме на Столбце Метки времени в PostgreSQL

Таблица имеет столбец метки времени. Демонстрационное значение в этом могло быть 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() включительно обоих пределов? Документация не проливает света на это.

6
задан Pascal Thivent 9 May 2010 в 13:24
поделиться

3 ответа

Возможно, вы сможете ПРИСОЕДИНЯТЬ временную метку к DATE. В HQL есть поддержка для этого.

0
ответ дан 17 December 2019 в 07:02
поделиться

, я хотел бы знать, есть ли способ сопоставить только часть даты в столбце временной метки.

Если вам не нужен TIMESTAMP, используйте DATE (а не следует ли использовать type = "date" ?).

Кроме того, включает ли Expression.between () оба предела?

Похоже, что поведение оператора SQL BETWEEN зависит от базы данных . В PosgresQL выражение BETWEEN:

x BETWEEN y AND z

семантически эквивалентно:

y <= x AND x <= z

т.е. включительно.

3
ответ дан 17 December 2019 в 07:02
поделиться

"2010-03-31 23:59:59." пограничное состояние потенциально опасно: если в системе была транзакция между 23:59:59 и 00:00:00, вы ее пропустите. Если у вас достаточно транзакций в день и достаточно продолжительный период, отчет может сломаться, и вы потратите часы, чтобы выяснить, почему.

PostgreSQL между включает ограничения , поэтому было бы даже небезопасно устанавливать дату окончания на 2010-04-01 00:00:00. Для уверенности используйте lt () и gt ().

1
ответ дан 17 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: