比较并从jpql中的字符串中提取数字

时间:2015-11-20 16:08:55

标签: jpql

我的record_number类型的列varchar具有以下格式数据:[currentYear]-[Number] ex:2015-11

我需要搜索此列的最大数量; ie:如果包含最大值的列的值为2015-15,然后该值应为15,则如果列的值为2016-2,则max应为{ {1}}。 我怎么能在jpql中做到这一点?

我正在使用Postgres和EJB 3.1

2 个答案:

答案 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();