spring数据查询子串

u0njafvf  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(355)

我有一个专栏叫 PAYMENT_REF 包含以下序列的值:

DBC2020999999999999

它总是有长度的 19DBC 然后是本部分的年份: DBC2020 年后的下列数字是一个序列号 999999999999 .
基本上我需要做一个查询,只从序列号中找到最大值,忽略静态值 DBC 和年份 2020 .
基本上,当我在oracle developer ide上运行以下查询时,我得到了正确的结果:

select MAX(SUBSTR(PAYMENT_REF,7,19))
from PAYMENT p
where PAYMENT_REF is not null;

因此,我尝试了以下查询,其中looks应获得最大值:

public interface PaymentRepository extends JpaRepository<Payment, String> {

    @Query(" select MAX(SUBSTRING(p.paymentRef,7,19)) from payment p where p.paymentRef is not null")
    int getMaxRefNumber();
}

但我得到一个编译错误,无法解析符号:付款,有什么想法我在这里错过了请?

zour9fqk

zour9fqk1#

我想你应该用以下方法来纠正你的疑问:

@Query("select MAX(SUBSTRING(p.paymentRef, 8, 12)) from Payment p where p.paymentRef is not null")
String getMaxRefNumber();

如文件所述: SUBSTRING 提取字符串值的一部分。第二个参数表示起始位置,其中1是字符串的第一个字符。第三个(可选)参数表示长度。

1      8
|      |
DBC2020999999999999
       \          /
         12 chars

p、 老实说,我无法在hql中将字符串转换为数字。
声明如下:

select MAX( cast(SUBSTRING(p.paymentRef, 8, 12) as long) )
from Payment p where p.paymentRef is not null

将不起作用,出现以下异常:

java.lang.IllegalArgumentException: Type specified for TypedQuery [java.lang.Long] is incompatible with query return type [class java.lang.String]
at org.hibernate.internal.AbstractSharedSessionContract.resultClassChecking(AbstractSharedSessionContract.java:863)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:817)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23)

相关问题