我的record_number
类型的列varchar
具有以下格式数据:[currentYear]-[Number]
ex:2015-11
我需要搜索此列的最大数量; ie:如果包含最大值的列的值为2015-15
,然后该值应为15
,则如果列的值为2016-2
,则max应为{ {1}}。
我怎么能在jpql中做到这一点?
我正在使用Postgres和EJB 3.1
答案 0 :(得分:0)
您可以使用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()
答案 1 :(得分:0)
我设法根据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();