Извлечение даты из отметки времени в HQL для сравнения в предложении where - PullRequest
0 голосов
/ 06 января 2020

Я хочу извлечь (year, month, dayOfMonth) из поля отметки времени, используя HQL для сравнения в предложении where.

Пример:

Query hibernateQuery = session.createQuery("select sum(t.amount) from Transaction t " + 
  "where extract_date(t.timestampField) = :date");

hibernateQuery.setParameter("date", LocalDate.of(2018, 10, 11));

System.out.println( hibernateQuery.getSingleResult() );

Итак, я ищу функция, подобная этой псевдо-функции extract_date(t.timestampField), которую я использовал в примере выше.

1 Ответ

1 голос
/ 06 января 2020

Это должно работать правильно

Query hibernateQuery = session.createQuery("select sum(t.amount) from Transaction t " + 
      "where DATE(t.timestampField) = :date");

hibernateQuery.setParameter("date", new java.sql.Date.valueOf("2018-10-11"));

Примечание: тип данных, возвращаемый функцией DATE(...), равен java.sql.Date, поэтому, если у вас есть java.time.LocalDate, это может быть легко преобразуется в java.sql.Date следующим образом:

LocalDate localDate = LocalDate.of(2018, 10, 11);
java.sql.Date sqlDate = java.sql.Date.valueOf(localDate);

Обсуждается в следующем Q / A.

{ ссылка }

...