gpt4 book ai didi

java - 如何在 HQL 查询中从当前日期减去天数

转载 作者:可可西里 更新时间:2023-11-01 08:25:08 38 4
gpt4 key购买 nike

我正在使用 HQL 获取从现在起正好 21 天后插入的数据。这是我的代码

Query queryThreeWeek = session.createQuery("from Users where createdDate = CURDATE()-21");
List<Users> userDetailsThreeWeekList = queryThreeWeek.list();

我不能使用 createSQLQuery。现在我没有得到任何数据,但有日期 2016-06-20 的数据。这是因为月份发生了变化,因为当我使用 CURDATE()-7 时,我得到了日期 2016-07-04 的正确数据。dat 的计算是这样的;

2016-07-11 - 7 = 20160704
2016-07-11 - 21 = 20160690

我也厌倦了使用 INTERVAL,它用于 native sqlQuery。这是我在 HQL 中使用 INTERVAL 的代码:

Query queryThreeWeek = session.createQuery("from Users where createdDate = DATE( DATE_SUB( NOW() , INTERVAL 21 DAY ) )");
List<Users> userDetailsThreeWeekList = queryThreeWeek.list();

也试过

Query queryThreeWeek = session.createQuery("from Users where createdDate = DATE( DATE_SUB( CURDATE() , INTERVAL 21 DAY ) )"); 
List<Users> userDetailsThreeWeekList = queryThreeWeek.list();

但它给我的异常如下:org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: 21

那么我可以使用什么来代替像这样减去日期:CURDATE()-21?仅在 HQL 中

最佳答案

我已经通过使用一个 native SQL 查询解决了这个问题,该查询可以获得准确的日期。

Query sub3Week = session.createSQLQuery("select DATE( DATE_SUB( CURDATE() , INTERVAL 21 DAY ) ) from dual");
List<Date> sub3WeekList = sub3Week.list();

然后我在 HQL 查询中使用这些数据,如下所示:

Query queryThreeWeek = session.createQuery("from Users where createdDate = :createdDate");
queryThreeWeek.setParameter("createdDate", sub3WeekList.get(0).toString());
List<Users> userDetailsThreeWeekList = queryThreeWeek.list();

关于java - 如何在 HQL 查询中从当前日期减去天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309016/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com