我有一个名为record_number的列,类型为varchar,其数据格式如下:[currentYear]-[Number] ex:2015-11
我需要搜索该列的最大数量;即:如果保存最大值的列的值是2015-15,那么该值应该是15,但是如果该列的值是2016-2,那么最大值应该是2。用jpql怎么做?
我使用的是Postgres和EJB 3.1
发布于 2015-11-24 23:39:19
您可以使用JPA的SUBSTRING方法:
select table From Table table order by SUBSTRING(table.record_number, 5) desc;要只获得第一个结果,您需要使用方法maxResults,如下所示:
em.createQuery("select table From Table table order by SUBSTRING(table.record_number, 5) desc")
.setMaxResults(1) -- only the first result
.getResultList()发布于 2015-11-26 22:29:23
我设法根据Dherik的评论修复了这个问题:我使用以下查询来获取包含正确值的对象,该对象似乎比Dherik提出的值更优化:
final TypedQuery<Table> query = createTypedQuery("from Table t where t.recordNumber= (select max(t.recordNumber) from t)", Table.class);
Table t= null;
try {
t = query.getSingleResult();
}catch(Exception e){
//handle Exception Here
}
return t;诀窍是因为是我的应用程序创建了记录号,所以我更改了创建记录号的方法,将记录号格式化为2位数,以避免出现错误的字符串比较(当'9'被认为大于'10'时)
// format the number <10 so that is on 2 digits
final String formattedNumber = String.format("%02d", number);
final int year = SomeUtilClass.getYearFromDate(new Date());
return new StringBuilder().append(year).append("-").append(formattedNumber).toString();https://stackoverflow.com/questions/33831134
复制相似问题