如何解决Spring数据查询子串
我有一列名为 PAYMENT_REF
的列包含以下序列的值:
DBC2020999999999999
它的长度总是 19
,以 DBC
开头,后面是年份,即这一部分:DBC2020
年份后面的数字是序列号,即999999999999
。
基本上我需要做一个查询,只从忽略静态 DBC
和年份 2020
的序列号中找到最大值。
基本上,当我在 oracle developer ide 上运行以下查询时,我得到了正确的结果:
select MAX(SUBSTR(PAYMENT_REF,7,19))
from PAYMENT p
where PAYMENT_REF is not null;
所以我尝试了以下查询,它看起来应该得到以下的最大值:
public interface PaymentRepository extends JpaRepository<Payment,String> {
@Query(" select MAX(SUBSTRING(p.paymentRef,19)) from payment p where p.paymentRef is not null")
int getMaxRefNumber();
}
但我收到一个编译错误无法解析符号:付款,请问我在这里遗漏了什么?
解决方法
我想您应该通过以下方式更正您的查询:
@Query("select MAX(SUBSTRING(p.paymentRef,8,12)) from Payment p where p.paymentRef is not null")
String getMaxRefNumber();
正如 documentation 中所述:
SUBSTRING
提取字符串值的一部分。第二个参数表示起始位置,其中 1 是字符串的第一个字符。第三个(可选)参数表示长度。
1 8
| |
DBC2020999999999999
\ /
12 chars
附言老实说,我无法在 hql 中将字符串转换为数字。
语句如下:
select MAX( cast(SUBSTRING(p.paymentRef,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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。