如何在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
相关产品推荐
相关产品推荐

