从 HQL 中的时间戳中提取日期以便在 where 子句中进行比较
Extracting date from timestamp in HQL for comparison in a where clause
我想使用 HQL 从时间戳字段中提取 (year, month, dayOfMonth) 以便在 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)
的函数。
这应该可以正常工作
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。
我想使用 HQL 从时间戳字段中提取 (year, month, dayOfMonth) 以便在 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)
的函数。
这应该可以正常工作
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。