首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从jpql中的字符串中比较并提取数字

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

Stack Overflow用户
提问于 2015-11-21 00:08:55
回答 2查看 524关注 0票数 1

我有一个名为record_number的列,类型为varchar,其数据格式如下:[currentYear]-[Number] ex:2015-11

我需要搜索该列的最大数量;即:如果保存最大值的列的值是2015-15,那么该值应该是15,但是如果该列的值是2016-2,那么最大值应该是2。用jpql怎么做?

我使用的是Postgres和EJB 3.1

EN

回答 2

Stack Overflow用户

发布于 2015-11-24 23:39:19

您可以使用JPA的SUBSTRING方法:

代码语言:javascript
复制
select table From Table table order by SUBSTRING(table.record_number, 5) desc;

要只获得第一个结果,您需要使用方法maxResults,如下所示:

代码语言:javascript
复制
em.createQuery("select table From Table table order by SUBSTRING(table.record_number, 5) desc")
    .setMaxResults(1) -- only the first result
    .getResultList()
票数 0
EN

Stack Overflow用户

发布于 2015-11-26 22:29:23

我设法根据Dherik的评论修复了这个问题:我使用以下查询来获取包含正确值的对象,该对象似乎比Dherik提出的值更优化:

代码语言:javascript
复制
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'时)

代码语言:javascript
复制
// 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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33831134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档