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

Hibernate HQL如何查询endDate年月日与当前日期完全一致的所有记录

HQL查询日期完全匹配的最优实现方案

你之前的写法仅匹配了日维度参数,缺少年、月的匹配条件,因此会返回跨年月的错误结果。有两种主流实现方案,优先推荐性能更优的范围查询方案:

方案1:时间范围查询(性能最优,支持索引命中)

该方案不对数据库存储的endDate字段做任何函数计算,可正常命中字段上的索引,大数据量下查询效率远高于函数转换方案。逻辑为匹配所有大于等于今日零点、小于明日零点的时间:

Java参数处理

// 生成今日零点、明日零点的时间参数
ZonedDateTime todayStart = ZonedDateTime.now().with(LocalTime.MIN);
ZonedDateTime tomorrowStart = todayStart.plusDays(1);

HQL语句

select i from Items i where i.endDate >= :todayStart and i.endDate < :tomorrowStart

方案2:年月日分别匹配(仅适合小数据量场景)

如果不需要考虑索引命中,也可以同时匹配年、月、日三个维度实现需求:

HQL语句

select i from Items i 
where year(i.endDate) = year(:today) 
  and month(i.endDate) = month(:today) 
  and day(i.endDate) = day(:today)

注:该写法会对endDate字段做三层函数计算,无法命中字段索引,数据量超过10万级时会有明显性能损耗

特殊场景简化方案

如果你的endDate字段在数据库中是DATE类型(无时分秒存储),可直接简化为等值匹配:

Java参数处理

LocalDate today = LocalDate.now();

HQL语句

select i from Items i where i.endDate = :today

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:45:03