You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JPQL中从日期字段提取完整年份并进行比较?

JPQL查询中从日期字段提取完整年份并匹配的正确写法

问题说明

你的Student实体中doj字段格式为06-SEP-17,需要提取完整年份(如转为2017)并进行查询匹配,原查询直接将日期字段与字符串'2017'比较的写法无法实现需求,以下是正确解决方案:


方案1:doj为日期类型(推荐)

如果实体类中doj定义为java.util.Date、java.time.LocalDate等标准日期类型,JPQL支持YEAR()函数直接提取年份,写法如下:

@Query(value = "SELECT stud FROM Student stud WHERE YEAR(stud.doj) = 2017")
List<Student> getStudents();

方案2:doj为字符串类型(不推荐)

若因历史限制doj只能是字符串类型,可根据其DD-MMM-YY的格式,截取最后两位年份进行匹配:

MySQL 适配写法

@Query(value = "SELECT stud FROM Student stud WHERE CONCAT('20', RIGHT(stud.doj, 2)) = '2017'")
List<Student> getStudents();

Oracle 适配写法

@Query(value = "SELECT stud FROM Student stud WHERE CONCAT('20', SUBSTR(stud.doj, -2)) = '2017'")
List<Student> getStudents();

注意:字符串类型的日期处理存在局限性(如无法兼容19xx年的年份),强烈建议将doj字段修改为标准日期类型,既提升查询效率,也能避免格式转换的潜在问题。

内容的提问来源于stack exchange,提问作者Ajit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:20:25